API ngôn ngữ tự nhiên Cloud cho phép bạn trích xuất các thực thể từ văn bản, thực hiện cảm tính và phân tích cú pháp, cũng như phân loại văn bản thành các danh mục.
Trong phòng thí nghiệm này, chúng tôi sẽ tìm hiểu cách sử dụng API Ngôn ngữ tự nhiên để phân tích các thực thể, cảm xúc và cú pháp.
Kiến thức bạn sẽ học được
- Tạo một yêu cầu API Ngôn ngữ tự nhiên và gọi API bằng curl
- Trích xuất các thực thể và phân tích cảm xúc trên văn bản bằng API Ngôn ngữ tự nhiên
- Thực hiện việc phân tích ngôn ngữ trên văn bản bằng API Ngôn ngữ tự nhiên
- Tạo yêu cầu API Ngôn ngữ tự nhiên bằng một ngôn ngữ khác
Bạn cần
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Vui lòng cho biết trải nghiệm của bạn đối với Google Cloud Platform.
Thiết lập môi trường theo tiến độ riêng
Nếu chưa có Tài khoản Google (Gmail hoặc Google Apps), thì bạn phải tạo một tài khoản. Đăng nhập vào bảng điều khiển của Google Cloud Platform (console.cloud.google.com) và tạo một dự án mới:
Hãy ghi nhớ mã dự án, một tên duy nhất trên tất cả các dự án Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động cho bạn!). Lớp học này sẽ được gọi sau này trong lớp học lập trình này là PROJECT_ID
.
Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Nếu tham gia lớp học lập trình này, bạn sẽ không mất quá vài đô la, nhưng có thể sẽ hiệu quả hơn nếu bạn quyết định sử dụng nhiều tài nguyên hơn hoặc nếu bạn để các tài nguyên đó hoạt động (xem "cleanup" ở cuối tài liệu này).
Người dùng mới của Google Cloud Platform đủ điều kiện dùng thử 300 đô la dùng thử miễn phí.
Nhấp vào biểu tượng trình đơn ở phía trên cùng bên trái màn hình.
Chọn API & dịch vụ từ trình đơn thả xuống và nhấp vào Trang tổng quan
Nhấp vào Bật API và dịch vụ.
Sau đó, tìm kiếm "language" trong hộp tìm kiếm. Nhấp vào API Ngôn ngữ tự nhiên của Google Cloud:
Nhấp vào Bật để bật API Cloud Ngôn ngữ:
Đợi vài giây để tùy chọn này bật. Bạn sẽ thấy thông báo sau khi tính năng này được bật:
Google Cloud Shell là một môi trường dòng lệnh chạy trong Cloud. Máy ảo dựa trên Debian này được tải bằng tất cả công cụ phát triển mà bạn cần (gcloud
, bq
, git
, v.v.) và cung cấp một thư mục gốc 5GB cố định. Chúng tôi sẽ sử dụng Cloud Shell để tạo yêu cầu của mình đối với API Tự nhiên.
Để bắt đầu sử dụng Cloud Shell, hãy nhấp vào "Kích hoạt Google Cloud Shell" biểu tượng ở góc trên cùng bên phải của thanh tiêu đề
Phiên hoạt động trên Cloud Shell mở ra trong một khung mới ở cuối bảng điều khiển và hiển thị lời nhắc dòng lệnh. Chờ cho đến khi lời nhắc user@project:~$ xuất hiện
Vì chúng tôi sẽ sử dụng curl để gửi yêu cầu tới API Tự nhiên, nên chúng tôi sẽ cần tạo khóa API để chuyển URL của yêu cầu của mình. Để tạo một khóa API, hãy chuyển đến phần Thông tin xác thực của các API & các dịch vụ trong Cloud Console của bạn:
Trong trình đơn thả xuống, hãy chọn Khóa API:
Tiếp theo, hãy sao chép chìa khóa bạn vừa tạo. Bạn sẽ cần chìa khóa này sau trong phòng thí nghiệm.
Giờ đây, bạn đã có khóa API, hãy lưu khóa đó vào biến môi trường để tránh phải chèn giá trị của khóa API vào mỗi yêu cầu. Bạn có thể thực hiện việc này trong Cloud Shell. Đảm bảo thay thế <your_api_key>
bằng khóa bạn vừa sao chép.
export API_KEY=<YOUR_API_KEY>
Phương thức API Ngôn ngữ tự nhiên đầu tiên chúng tôi sẽ sử dụng là analyzeEntities
. Với phương thức này, API có thể trích xuất các thực thể (như con người, địa điểm và sự kiện) từ văn bản. Để dùng thử tính năng phân tích thực thể của API, chúng tôi sẽ sử dụng câu sau:
Joanne Rowling, người viết kịch bản bằng bút danh J. I.K. Rowling và Robert Galbraith là một tiểu thuyết gia và nhà viết kịch bản người Anh đã viết loạt phim giả tưởng Harry Potter.
Chúng tôi sẽ tạo yêu cầu của mình đối với API Ngôn ngữ tự nhiên trong một tệp request.json
. Trong môi trường Cloud Shell, hãy tạo tệp request.json
bằng mã bên dưới. Bạn có thể tạo tệp bằng một trong các trình chỉnh sửa dòng lệnh ưu tiên của mình (nano, vim, emacs) hoặc sử dụng trình chỉnh sửa Orion tích hợp sẵn trong Cloud Shell:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"Joanne Rowling, who writes under the pen names J. K. Rowling and Robert Galbraith, is a British novelist and screenwriter who wrote the Harry Potter fantasy series."
},
"encodingType":"UTF8"
}
Trong yêu cầu, chúng tôi sẽ thông báo cho API Ngôn ngữ tự nhiên về văn bản mà chúng tôi sẽ gửi. Giá trị loại được hỗ trợ là PLAIN_TEXT
hoặc HTML
. Trong nội dung, chúng tôi chuyển văn bản để gửi đến API Ngôn ngữ tự nhiên để phân tích. API Ngôn ngữ tự nhiên cũng hỗ trợ gửi tệp được lưu trữ trong Cloud Storage để xử lý văn bản. Nếu muốn gửi một tệp từ Cloud Storage, chúng tôi sẽ thay thế content
bằng gcsContentUri
và gán giá trị đó cho tệp văn bản của mình trong Cloud Storage. encodingType
cho API biết loại mã hóa văn bản nên dùng khi xử lý văn bản của chúng ta. API sẽ sử dụng thông tin này để tính toán vị trí của các thực thể cụ thể trong văn bản của chúng tôi.
Giờ đây, bạn có thể chuyển nội dung yêu cầu của mình, cùng với biến môi trường khóa API mà bạn đã lưu trước đó, vào API ngôn ngữ tự nhiên bằng lệnh curl
sau (tất cả trong một dòng lệnh duy nhất):
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
Phần đầu của câu trả lời sẽ có dạng như sau:
{
"entities": [
{
"name": "Robert Galbraith",
"type": "PERSON",
"metadata": {
"mid": "/m/042xh",
"wikipedia_url": "https://en.wikipedia.org/wiki/J._K._Rowling"
},
"salience": 0.7980405,
"mentions": [
{
"text": {
"content": "Joanne Rowling",
"beginOffset": 0
},
"type": "PROPER"
},
{
"text": {
"content": "Rowling",
"beginOffset": 53
},
"type": "PROPER"
},
{
"text": {
"content": "novelist",
"beginOffset": 96
},
"type": "COMMON"
},
{
"text": {
"content": "Robert Galbraith",
"beginOffset": 65
},
"type": "PROPER"
}
]
},
...
]
}
Đối với mỗi thực thể trong phản hồi, chúng ta sẽ nhận được thực thể type
, URL Wikipedia liên kết nếu có, salience
và chỉ mục của vị trí mà thực thể này xuất hiện trong văn bản. Sự yên tĩnh là một số trong phạm vi [0,1] đề cập đến điểm trung tâm của thực thể so với toàn bộ văn bản. API Ngôn ngữ tự nhiên cũng có thể nhận dạng cùng một thực thể được đề cập theo nhiều cách. Hãy xem danh sách mentions
trong phản hồi: API có thể biết rằng "Joanne Rowling", " Rowling", "novelist" và "Robert Galbriath" tất cả đều trỏ đến cùng một thứ.
Ngoài việc trích xuất các thực thể, API Ngôn ngữ tự nhiên cũng cho phép bạn thực hiện phân tích cảm xúc trên một khối văn bản. Yêu cầu JSON của chúng tôi sẽ bao gồm các thông số tương tự như yêu cầu của chúng tôi ở trên, nhưng lần này, chúng tôi sẽ thay đổi văn bản để bao gồm nội dung nào đó có cảm xúc mạnh hơn. Hãy thay thế tệp request.json
của bạn bằng nội dung sau đây và thoải mái thay thế content
bên dưới bằng văn bản của riêng bạn:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"Harry Potter is the best book. I think everyone should read it."
},
"encodingType": "UTF8"
}
Tiếp theo, chúng ta sẽ gửi yêu cầu đến điểm cuối analyzeSentiment
của API:
curl "https://language.googleapis.com/v1/documents:analyzeSentiment?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
Phản hồi của bạn sẽ có dạng như sau:
{
"documentSentiment": {
"magnitude": 0.8,
"score": 0.4
},
"language": "en",
"sentences": [
{
"text": {
"content": "Harry Potter is the best book.",
"beginOffset": 0
},
"sentiment": {
"magnitude": 0.7,
"score": 0.7
}
},
{
"text": {
"content": "I think everyone should read it.",
"beginOffset": 31
},
"sentiment": {
"magnitude": 0.1,
"score": 0.1
}
}
]
}
Xin lưu ý rằng chúng ta nhận được hai loại giá trị cảm xúc: ý kiến cho toàn bộ tài liệu và cảm xúc chia nhỏ theo câu. Phương thức biểu cảm trả về hai giá trị: score
và magnitude
. score
là một số từ -1.0 đến 1.0 cho biết mức độ tích cực hoặc tiêu cực của câu. magnitude
là một số trong khoảng từ 0 đến vô cực thể hiện trọng số của cảm xúc được thể hiện trong câu lệnh, bất kể tích cực hay tiêu cực. Các khối văn bản dài hơn có câu lệnh có trọng số lớn sẽ có giá trị lớn hơn. Điểm cho câu đầu tiên là số dương (0,7), trong khi điểm cho câu thứ hai là trung bình (0,1).
Ngoài việc cung cấp thông tin chi tiết về ý kiến trên toàn bộ tài liệu văn bản mà chúng tôi gửi API NL, ứng dụng này cũng có thể chia nhỏ ý kiến theo thực thể trong văn bản của chúng tôi. Hãy sử dụng câu này làm ví dụ:
Tôi thích sushi nhưng dịch vụ thật tệ.
Trong trường hợp này, việc lấy điểm ý kiến cho toàn bộ câu như chúng ta đã làm ở trên có thể không hữu ích lắm. Nếu đây là một bài đánh giá về nhà hàng và có hàng trăm bài đánh giá cho cùng một nhà hàng, chúng tôi muốn biết chính xác những gì mọi người đã thích và không thích trong các bài đánh giá của họ. Rất may là API NL có một phương thức cho phép chúng ta đánh giá cảm xúc của từng đối tượng trong văn bản, được gọi là analyzeEntitySentiment
. Hãy cập nhật request.json của bạn bằng câu ở trên để dùng thử:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"I liked the sushi but the service was terrible."
},
"encodingType": "UTF8"
}
Sau đó, gọi điểm cuối analyzeEntitySentiment
bằng lệnh curl sau:
curl "https://language.googleapis.com/v1/documents:analyzeEntitySentiment?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
Để phản hồi, chúng ta nhận được hai đối tượng cho thực thể: một cho "sushi" một cho "service." Đây là phản hồi JSON đầy đủ:
{
"entities": [
{
"name": "sushi",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.52716845,
"mentions": [
{
"text": {
"content": "sushi",
"beginOffset": 12
},
"type": "COMMON",
"sentiment": {
"magnitude": 0.9,
"score": 0.9
}
}
],
"sentiment": {
"magnitude": 0.9,
"score": 0.9
}
},
{
"name": "service",
"type": "OTHER",
"metadata": {},
"salience": 0.47283158,
"mentions": [
{
"text": {
"content": "service",
"beginOffset": 26
},
"type": "COMMON",
"sentiment": {
"magnitude": 0.9,
"score": -0.9
}
}
],
"sentiment": {
"magnitude": 0.9,
"score": -0.9
}
}
],
"language": "en"
}
Chúng ta có thể thấy rằng điểm đã trả cho "sushi" là 0,9, trong khi "service" nhận được điểm -0,9. Tuyệt! Bạn cũng có thể nhận thấy rằng có hai đối tượng cảm xúc được trả về cho mỗi thực thể. Nếu một trong hai cụm từ này được đề cập nhiều lần, thì API sẽ trả về một điểm ý kiến khác nhau và mức độ khác nhau cho mỗi lượt đề cập, cùng với ý kiến tổng hợp cho thực thể.
Xem xét phương pháp thứ ba của API Ngôn ngữ tự nhiên – chú thích cú pháp – chúng ta sẽ tìm hiểu sâu hơn về các chi tiết ngôn ngữ của văn bản. analyzeSyntax
là phương thức cung cấp đầy đủ chi tiết về các yếu tố ngữ nghĩa và cú pháp của văn bản. Đối với mỗi từ trong văn bản, API sẽ cho chúng ta biết phần lời nói (danh từ, động từ, tính từ, v.v.) và mức độ liên quan đến các từ khác trong câu (Có phải động từ gốc không? Công cụ sửa đổi?).
Hãy thử dùng một câu đơn giản. Yêu cầu JSON của chúng tôi sẽ tương tự như yêu cầu ở trên, với việc bổ sung khóa tính năng. Điều này sẽ cho API biết rằng chúng tôi muốn thực hiện chú thích cú pháp. Thay thế request.json của bạn bằng:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content": "Hermione often uses her quick wit, deft recall, and encyclopaedic knowledge to help Harry and Ron."
},
"encodingType": "UTF8"
}
Sau đó, gọi phương thức analyzeSyntax
của API:
curl "https://language.googleapis.com/v1/documents:analyzeSyntax?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
Phản hồi sẽ trả về một đối tượng như đối tượng dưới đây cho từng mã thông báo trong câu. Ở đây chúng tôi sẽ xem xét phản hồi cho từ "uses":
{
"text": {
"content": "uses",
"beginOffset": 15
},
"partOfSpeech": {
"tag": "VERB",
"aspect": "ASPECT_UNKNOWN",
"case": "CASE_UNKNOWN",
"form": "FORM_UNKNOWN",
"gender": "GENDER_UNKNOWN",
"mood": "INDICATIVE",
"number": "SINGULAR",
"person": "THIRD",
"proper": "PROPER_UNKNOWN",
"reciprocity": "RECIPROCITY_UNKNOWN",
"tense": "PRESENT",
"voice": "VOICE_UNKNOWN"
},
"dependencyEdge": {
"headTokenIndex": 2,
"label": "ROOT"
},
"lemma": "use"
}
Hãy phân tích phản hồi. partOfSpeech
cung cấp cho chúng tôi các chi tiết về ngôn ngữ học trên từng từ (nhiều từ khóa sẽ không được biết vì chúng không áp dụng cho tiếng Anh hoặc từ cụ thể này). tag
cho phần lời nói của từ này, trong trường hợp này là một động từ. Chúng tôi cũng thu thập thông tin chi tiết về thì động từ, phương thức và liệu từ đó là số ít hay số nhiều. lemma
là dạng chuẩn của từ (for "uses" it\39;s "use"). Ví dụ: các từ run, run, ran và Run đều có từ run. Giá trị lemm rất hữu ích để theo dõi các lần xuất hiện của một từ trong một đoạn văn bản lớn theo thời gian.
dependencyEdge
bao gồm dữ liệu mà bạn có thể sử dụng để tạo cây phân tích cú pháp phụ thuộc của văn bản. Đây là sơ đồ cho thấy mức độ liên quan giữa các từ trong câu. Cây phân tích cú pháp phụ thuộc cho câu trên sẽ có dạng như sau:
headTokenIndex
trong phản hồi của chúng tôi ở trên là chỉ mục của mã thông báo có vòng cung trỏ vào "uses". Chúng ta có thể coi mỗi mã thông báo trong câu là một từ trong một mảng và headTokenIndex
của 2 là "uses" đề cập đến từ "thường," mà nó được kết nối trong cây.
API Ngôn ngữ tự nhiên cũng hỗ trợ các ngôn ngữ khác ngoài tiếng Anh (danh sách đầy đủ tại đây). Hãy thử yêu cầu thực thể sau bằng một câu bằng tiếng Nhật:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"日本のグーグルのオフィスは、東京の六本木ヒルズにあります"
},
"encodingType": "UTF8"
}
Xin lưu ý rằng chúng tôi không cho API của chúng tôi biết ngôn ngữ mà chúng tôi sử dụng, vì vậy, công cụ này có thể tự động phát hiện ngôn ngữ đó. Tiếp theo, chúng ta sẽ gửi điểm đến này đến điểm cuối analyzeEntities
:
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
Và đây là hai thực thể đầu tiên trong phản hồi của chúng tôi:
{
"entities": [
{
"name": "日本",
"type": "LOCATION",
"metadata": {
"mid": "/m/03_3d",
"wikipedia_url": "https://en.wikipedia.org/wiki/Japan"
},
"salience": 0.23854347,
"mentions": [
{
"text": {
"content": "日本",
"beginOffset": 0
},
"type": "PROPER"
}
]
},
{
"name": "グーグル",
"type": "ORGANIZATION",
"metadata": {
"mid": "/m/045c7b",
"wikipedia_url": "https://en.wikipedia.org/wiki/Google"
},
"salience": 0.21155767,
"mentions": [
{
"text": {
"content": "グーグル",
"beginOffset": 9
},
"type": "PROPER"
}
]
},
...
]
"language": "ja"
}
API trích xuất Nhật Bản như một vị trí và Google là một tổ chức, cùng với các trang Wikipedia cho mỗi vị trí.
Bạn đã tìm hiểu cách phân tích văn bản bằng API Cloud Natural Language bằng cách trích xuất các thực thể, phân tích cảm tính và chú thích về cú pháp.
Những điều chúng tôi đã đề cập
- Tạo một yêu cầu API Ngôn ngữ tự nhiên và gọi API bằng curl
- Trích xuất các thực thể và phân tích cảm xúc trên văn bản bằng API Ngôn ngữ tự nhiên
- Thực hiện phân tích ngôn ngữ trên văn bản để tạo cây phân tích cú pháp phụ thuộc
- Tạo yêu cầu API Ngôn ngữ tự nhiên bằng tiếng Nhật
Các bước tiếp theo
- Tham khảo hướng dẫn về API Ngôn ngữ tự nhiên trong tài liệu.
- Dùng thử API Vision và Speech API!