Part of Speech [POS] là một cách diễn tả chức năng ngữ pháp của một từ. Trong Xử lý ngôn ngữ tự nhiên [NLP], POS là một khối xây dựng thiết yếu của các mô hình ngôn ngữ và diễn giải văn bản. Mặc dù các thẻ POS được sử dụng trong các chức năng cấp cao hơn của NLP, nhưng điều quan trọng là phải tự hiểu chúng và có thể tận dụng chúng cho các mục đích hữu ích trong phân tích văn bản của bạn
Có một hệ thống phân cấp các nhiệm vụ trong NLP [xem danh sách]. Ở phía dưới là phân đoạn câu và từ. Tính năng gắn thẻ POS được xây dựng dựa trên điều đó và tính năng chia cụm từ được xây dựng dựa trên thẻ POS. Đến lượt mình, các thẻ này có thể được sử dụng làm tính năng cho các tác vụ cấp cao hơn, chẳng hạn như xây dựng cây phân tích cú pháp, lần lượt, có thể được sử dụng cho Độ phân giải thực thể được đặt tên, Độ phân giải tham chiếu, Phân tích tình cảm và Trả lời câu hỏi
Có tám [đôi khi chín] phần khác nhau của bài phát biểu bằng tiếng Anh thường được định nghĩa
- Danh từ. Một danh từ là tên của một người, địa điểm, sự vật hoặc ý tưởng
- đại từ. Đại từ là từ dùng thay cho danh từ
- động từ. Một động từ diễn tả hành động hoặc là
- Tính từ. Một tính từ sửa đổi hoặc mô tả một danh từ hoặc đại từ
- trạng từ. Một trạng từ sửa đổi hoặc mô tả một động từ, một tính từ hoặc một trạng từ khác
- giới từ. Giới từ là một từ được đặt trước một danh từ hoặc đại từ để tạo thành một cụm từ bổ nghĩa cho một từ khác trong câu
- Sự liên kết. Liên từ nối các từ, cụm từ hoặc mệnh đề
- thán từ. Thán từ là từ dùng để bộc lộ cảm xúc
- Xác định hoặc Điều. Dấu hiệu ngữ pháp của tính xác định [the] hoặc tính không xác định [a, an]. Đây không phải lúc nào cũng được coi là POS nhưng thường được bao gồm trong thư viện gắn thẻ POS
Khái niệm cơ bản về gắn thẻ POS
Hãy bắt đầu với một số ví dụ đơn giản về gắn thẻ POS với ba thư viện Python phổ biến. NLTK , TextBlob và Spacy. Chúng tôi sẽ làm những điều cơ bản tuyệt đối cho từng và so sánh kết quả
Bắt đầu bằng cách nhập tất cả các thư viện cần thiết
import nltk
from textblob import TextBlob
from textblob.taggers import PatternTagger
import spacy
Đối với các ví dụ của chúng tôi, chúng tôi sẽ sử dụng hai câu với một từ phổ biến, sách, có thể là danh từ hoặc động từ, để kiểm tra mức độ hoạt động của trình gắn thẻ POS trong ngữ cảnh
- Vui lòng đặt chuyến bay của tôi đến California
- Tôi đã đọc một cuốn sách rất hay
NLTK
Hãy bắt đầu với thư viện phổ biến nhất cho NLP trong Python;
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
[[['Please', 'NNP'],
['book', 'NN'],
['my', 'PRP$'],
['flight', 'NN'],
['to', 'TO'],
['California', 'NNP']]]
tokenized_sent = nltk.sent_tokenize["I read a very good book"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
[[['I', 'PRP'],
['read', 'VBP'],
['a', 'DT'],
['very', 'RB'],
['good', 'JJ'],
['book', 'NN']]]
Điều chúng tôi nhận thấy ở đây là phần lớn, NLTK nhận dạng đúng từ trong ngữ cảnh;
Ghi chú. Để biết danh sách ý nghĩa của các thẻ, hãy xem Dự án Penn Treebank
văn bảnBlob
Hãy thử một thư viện khác có tên là TextBlob cung cấp một API đơn giản để đi sâu vào các tác vụ xử lý ngôn ngữ tự nhiên [NLP] tiêu chuẩn. Đó là một triển khai Pythonic rất tốt của thư viện NLP và đơn giản hóa một số tác vụ NLP phổ biến. Phần lớn những gì TextBlob làm là bọc NLTK và các thư viện NLP phổ biến khác để giúp chúng dễ sử dụng hơn
blob = TextBlob["Please book my flight to California", pos_tagger=PatternTagger[]]
blob.tags
[['Please', 'VB'],
['book', 'NN'],
['my', 'PRP$'],
['flight', 'NN'],
['to', 'TO'],
['California', 'NNP']]
blob = TextBlob["I read a very good book", pos_tagger=PatternTagger[]]
blob.tags
________số 8_______
Lưu ý việc sử dụng
[[['Please', 'NNP'],
['book', 'NN'],
['my', 'PRP$'],
['flight', 'NN'],
['to', 'TO'],
['California', 'NNP']]]
1 trong quá trình khởi tạo Blob. Mặc định là sử dụng trình gắn thẻ của NLTK, mang lại kết quả tương tự như trên. Điều này cho phép chúng tôi thử một Trình gắn thẻ POS khác và kiểm tra hiệu suất của nó. Chúng ta có thể thấy rằng TextBlob xác định chính xác Vui lòng ở dạng Động từ lần này nhưng vẫn bỏ lỡ Sách ở dạng Động từ trong câu đầu tiênSpacy
Spacy là chiếc hiện đại và cao cấp nhất trong 3 chiếc này. Nó cực kỳ mạnh mẽ cho hàng tấn nhiệm vụ NLP và cho phép tùy chỉnh nếu cần thêm sức mạnh. Đây hiện là thư viện NLP yêu thích của tôi và hãy kiểm tra nó bằng các câu của chúng tôi
doc = nlp["Please book my flight to California"]
for token in doc:
print[token.text, token.pos_]
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
0tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
1tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
2Ở đây, chúng tôi thấy rằng Spacy đã gắn thẻ chính xác tất cả các từ của chúng tôi và nó đã xác định Vui lòng thích Thán từ trái ngược với Động từ, chính xác hơn và cũng xác định Sách là Động từ trong câu đầu tiên
Mỗi thư viện này đều có ưu và nhược điểm. Tôi tin rằng bạn nên bắt đầu với NLTK để hiểu cách thức hoạt động của nó, đặc biệt là vì nó có rất nhiều sự hỗ trợ mạnh mẽ của các tập đoàn khác nhau. TextBlob tuyệt vời khi bạn muốn sự đơn giản trong một số tác vụ NLP và Spacy khi bạn muốn một trong những thư viện NLP mạnh mẽ nhất xung quanh
Hãy xem Sê-ri NLTK tuyệt vời này với Python cho Ngôn ngữ tự nhiên từ PythonProgramming. net
Phân tích giọng nói của khách hàng với các phần của bài phát biểu
Một trong những nhiệm vụ phổ biến nhất được thực hiện với NLP là phân tích phản hồi của khách hàng từ nhiều nguồn khác nhau và xác định những gì khách hàng đang nói về sản phẩm hoặc dịch vụ của bạn. Loại phân tích này được gọi là Phân tích Tiếng nói của Khách hàng hoặc VOC
Có nhiều cách để thực hiện phân tích VOC. Từ Phân tích tình cảm đến Lập mô hình chủ đề, một phương pháp bạn có thể sử dụng là gắn thẻ một phần của bài phát biểu để thu hẹp nội dung khách hàng đang nói và cách họ nói về sản phẩm và dịch vụ của bạn
Văn bản cho phân tích của bạn có thể đến từ phản hồi khảo sát, phiếu hỗ trợ, nhận xét trên Facebook, Tweet, cuộc trò chuyện, email, bản ghi cuộc gọi và đánh giá trực tuyến. Giả sử bạn có một bộ sưu tập các bài đánh giá của khách hàng. Một trong những điều bạn có thể muốn xác định là tất cả các sản phẩm mà mọi người đang nói đến. Bạn có thể có sự phân loại hoàn hảo các sản phẩm của mình trong cơ sở dữ liệu, nhưng nếu bạn không có ở cấp độ chi tiết mà bạn cần thì sao?
Sau khi nhập tập dữ liệu, chúng tôi có thể tạo DataFrame mới của tất cả các từ và thẻ POS của chúng. Hàm bên dưới thực hiện từng đánh giá và xác định thẻ POS cho từng từ;
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
3Tiếp theo, chúng ta có thể chạy chức năng trên một tập hợp con của các đánh giá. Vì chúng tôi đang sử dụng các từ riêng lẻ nên số lượng có thể lên tới hàng triệu và rất có thể chúng tôi không cần toàn bộ tập dữ liệu
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
4tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
5Tiếp theo, chúng tôi có thể nhóm và đếm từng thẻ POS để xem những thẻ thường xuyên nhất
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
6Tuyệt vời. Chúng tôi có rất nhiều thẻ và từ. Tuy nhiên, những điều này không cho chúng ta biết nhiều về bản thân chúng, cho chúng ta cái nhìn về sự phân bố của các thẻ khác nhau. Tuy nhiên, bây giờ chúng tôi có thể sử dụng các thẻ của mình để rút ra các từ có thể đại diện cho sản phẩm so với. những từ đại diện cho các từ khác trong bài đánh giá của chúng tôi. Đối với điều này, chúng ta có thể lọc chỉ Danh từ
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
7tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
8Nhìn kìa. Chúng tôi có 15 từ hàng đầu được sử dụng trong tập hợp con các bài đánh giá này và hầu hết chúng trông giống như danh mục sản phẩm. Điều gì sẽ xảy ra nếu bây giờ chúng ta xem xét các Tính từ hàng đầu cho cùng một tập hợp con các đánh giá?
tokenized_sent = nltk.sent_tokenize["Please book my flight to California"]
[nltk.pos_tag[nltk.word_tokenize[word]] for word in tokenized_sent]
9[[['Please', 'NNP'],
['book', 'NN'],
['my', 'PRP$'],
['flight', 'NN'],
['to', 'TO'],
['California', 'NNP']]]
0tada 🎉. những từ được sử dụng nhiều nhất mô tả cách khách hàng nói về sản phẩm của chúng tôi. Chúng tôi đã mất những từ tích cực nhưng cũng có một số từ có thể đáng để xem xét. Những thứ như nhỏ và nhỏ có khả năng nói lên vấn đề về kích thước khi một số quần áo không vừa vặn. Người quản lý sản phẩm có thể lấy thông tin này và tìm hiểu sâu hơn về các bài đánh giá có đề cập đến từ này
Như đã đề cập, có nhiều cách khác để phân tích văn bản có thể tốt hơn, chẳng hạn như Phân tích tình cảm và Lập mô hình chủ đề. Tuy nhiên, đây là một cách thú vị để áp dụng gắn thẻ POS trong trường hợp sử dụng thực tế và thậm chí được kết hợp với các công cụ NLP khác để giúp bạn tận dụng tối đa phản hồi của khách hàng
- Tất cả mã cho phân tích này đều có sẵn trên GitHub
- Tôi đã thực hiện đánh giá chuyên sâu về tập dữ liệu này mà bạn có thể tìm thấy trong Danh mục đầu tư của tôi dưới phần Đánh giá quần áo nơi tôi trình bày phân tích bổ sung tận dụng các kỹ thuật NLP và ML
Nếu bạn thích những gì bạn đọc, hãy đăng ký nhận bản tin của tôi và bạn sẽ nhận được bảng cheat của tôi về Python, Học máy [ML], Xử lý ngôn ngữ tự nhiên [NLP], SQL, v.v. Bạn sẽ nhận được email mỗi khi bài viết mới được đăng