Ngôn ngữ tự nhiên - Thật thú vị
Máy tính hiểu ngôn ngữ con người như thế nào
Máy tính rất giỏi trong việc xử lý dữ liệu có cấu trúc như bảng tính và bảng cơ sở dữ liệu. Nhưng con người chúng ta thường giao tiếp bằng lời nói, không phải bằng bảng. Điều đó thật không may cho máy tính.
Thật không may, chúng ta không sống trong một phiên bản lịch sử thay thế nơi tất cả dữ liệu đều có cấu trúc. Rất nhiều thông tin trên thế giới là phi cấu trúc - văn bản thô bằng tiếng Anh hoặc một ngôn ngữ con người khác. Làm thế nào chúng ta có thể khiến máy tính hiểu văn bản phi cấu trúc và trích xuất dữ liệu từ đó?
Xử lý ngôn ngữ tự nhiên, hay NLP, là một lĩnh vực con của AI tập trung vào việc cho phép máy tính hiểu và xử lý ngôn ngữ con người. Hãy cùng tìm hiểu cách NLP hoạt động và học cách viết các chương trình có thể trích xuất thông tin từ văn bản thô bằng Python!
Máy tính có thể hiểu ngôn ngữ không?
Từ khi máy tính ra đời, các lập trình viên đã cố gắng viết các chương trình hiểu các ngôn ngữ như tiếng Anh. Lý do khá rõ ràng - con người đã viết mọi thứ trong hàng ngàn năm và sẽ rất hữu ích nếu máy tính có thể đọc và hiểu tất cả dữ liệu đó.
Máy tính chưa thể thực sự hiểu tiếng Anh theo cách con người làm - nhưng chúng đã có thể làm được rất nhiều! Trong một số lĩnh vực hạn chế, những gì bạn có thể làm với NLP đã có vẻ như phép thuật. Bạn có thể tiết kiệm rất nhiều thời gian bằng cách áp dụng các kỹ thuật NLP vào các dự án của riêng mình.
Và thậm chí tốt hơn, những tiến bộ mới nhất trong NLP dễ dàng tiếp cận thông qua các thư viện Python mã nguồn mở như spaCy, textacy và neuralcoref. Những gì bạn có thể làm chỉ với vài dòng mã Python thật đáng kinh ngạc.
Trích xuất ý nghĩa từ văn bản rất khó
Quá trình đọc và hiểu tiếng Anh rất phức tạp - và đó thậm chí còn chưa tính đến việc tiếng Anh không tuân theo các quy tắc logic và nhất quán. Ví dụ, tiêu đề tin tức này có nghĩa là gì?
"Environmental regulators grill business owner over illegal coal fires."
Các nhà quản lý môi trường đang chất vấn một chủ doanh nghiệp về việc đốt than trái phép? Hay các nhà quản lý đang thực sự nướng chủ doanh nghiệp? Như bạn có thể thấy, phân tích tiếng Anh bằng máy tính sẽ rất phức tạp.
Làm bất cứ điều gì phức tạp trong học máy thường có nghĩa là xây dựng một quy trình. Ý tưởng là chia vấn đề của bạn thành các phần rất nhỏ và sau đó sử dụng học máy để giải quyết từng phần nhỏ riêng biệt. Sau đó, bằng cách xâu chuỗi nhiều mô hình học máy cấp dữ liệu cho nhau, bạn có thể làm những việc rất phức tạp.
Và đó chính xác là chiến lược chúng ta sẽ sử dụng cho NLP. Chúng ta sẽ chia nhỏ quá trình hiểu tiếng Anh thành các phần nhỏ và xem từng phần hoạt động như thế nào.
Xây dựng quy trình NLP, từng bước một
Hãy xem một đoạn văn bản từ Wikipedia:
"London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium."
(Nguồn: Bài viết Wikipedia "London")
Đoạn văn này chứa một số sự thật hữu ích. Sẽ rất tuyệt nếu máy tính có thể đọc văn bản này và hiểu rằng London là một thành phố, London nằm ở Anh, London được người La Mã định cư, v.v. Nhưng để đạt được điều đó, trước tiên chúng ta phải dạy máy tính của mình những khái niệm cơ bản nhất về ngôn ngữ viết và sau đó tiến lên từ đó.
Bước 1: Phân đoạn câu
Bước đầu tiên trong quy trình là chia văn bản thành các câu riêng biệt. Điều đó cho chúng ta điều này:
1. "London is the capital and most populous city of England and the United Kingdom."
2. "Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia."
3. "It was founded by the Romans, who named it Londinium."
Chúng ta có thể giả định rằng mỗi câu trong tiếng Anh là một ý nghĩ hoặc ý tưởng riêng biệt. Sẽ dễ dàng hơn rất nhiều để viết một chương trình hiểu một câu đơn lẻ hơn là hiểu toàn bộ đoạn văn.
Mã hóa một mô hình phân đoạn câu có thể đơn giản như việc tách các câu bất cứ khi nào bạn thấy một dấu câu. Nhưng các quy trình NLP hiện đại thường sử dụng các kỹ thuật phức tạp hơn hoạt động ngay cả khi tài liệu không được định dạng sạch sẽ.
Bước 2: Mã hóa từ (Word Tokenization)
Bây giờ chúng ta đã chia tài liệu của mình thành các câu, chúng ta có thể xử lý chúng từng câu một. Hãy bắt đầu với câu đầu tiên từ tài liệu của chúng ta:
"London is the capital and most populous city of England and the United Kingdom."
Bước tiếp theo trong quy trình của chúng ta là chia câu này thành các từ hoặc mã thông báo riêng biệt. Điều này được gọi là mã hóa. Đây là kết quả:
"London", "is", " the", "capital", "and", "most", "populous", "city", "of", "England", "and", "the", "United", "Kingdom", "."
Mã hóa dễ thực hiện trong tiếng Anh. Chúng ta sẽ chỉ tách các từ bất cứ khi nào có khoảng trắng giữa chúng. Và chúng ta cũng sẽ coi các dấu câu là các mã thông báo riêng biệt vì dấu câu cũng có ý nghĩa.
Bước 3: Dự đoán loại từ cho mỗi mã thông báo (Predicting Parts of Speech for Each Token)
Tiếp theo, chúng ta sẽ xem xét từng mã thông báo và cố gắng đoán loại từ của nó - liệu đó là danh từ, động từ, tính từ, v.v. Biết vai trò của mỗi từ trong câu sẽ giúp chúng ta bắt đầu tìm hiểu xem câu đang nói về điều gì.
Chúng ta có thể làm điều này bằng cách đưa mỗi từ (và một số từ bổ sung xung quanh nó để tạo ngữ cảnh) vào một mô hình phân loại loại từ đã được đào tạo trước:
Mô hình loại từ ban đầu được đào tạo bằng cách cung cấp cho nó hàng triệu câu tiếng Anh với loại từ của mỗi từ đã được gắn thẻ và yêu cầu nó học cách tái tạo hành vi đó.
Hãy nhớ rằng mô hình hoàn toàn dựa trên thống kê - nó không thực sự hiểu ý nghĩa của các từ theo cách con người làm. Nó chỉ biết cách đoán loại từ dựa trên các câu và từ tương tự mà nó đã thấy trước đây.
Sau khi xử lý toàn bộ câu, chúng ta sẽ có kết quả như sau:
Với thông tin này, chúng ta đã có thể bắt đầu thu thập một số ý nghĩa rất cơ bản. Ví dụ, chúng ta có thể thấy rằng các danh từ trong câu bao gồm "London" và "capital", vì vậy câu có thể đang nói về London.
Bước 4: Chuẩn hóa từ (Text Lemmatization)
Trong tiếng Anh (và hầu hết các ngôn ngữ), các từ xuất hiện dưới các dạng khác nhau. Hãy xem hai câu này:
I had a pony.
I had two ponies.
Cả hai câu đều nói về danh từ pony, nhưng chúng đang sử dụng các dạng biến thể khác nhau.
Khi làm việc với văn bản trong máy tính, việc biết dạng cơ bản của mỗi từ sẽ rất hữu ích để bạn biết rằng cả hai câu đều đang nói về cùng một khái niệm. Nếu không, các chuỗi "pony" và "ponies" trông giống như hai từ hoàn toàn khác nhau đối với máy tính.
Trong NLP, chúng ta gọi quá trình này là chuẩn hóa từ - tìm ra dạng cơ bản nhất hoặc lemma của mỗi từ trong câu.
Điều tương tự cũng áp dụng cho động từ. Chúng ta cũng có thể chuẩn hóa động từ bằng cách tìm gốc, dạng không chia của chúng. Vì vậy, "I had two ponies" trở thành "I [have] two [pony]."
Chuẩn hóa từ thường được thực hiện bằng cách có một bảng tra cứu các dạng lemma của từ dựa trên loại từ của chúng và có thể có một số quy tắc tùy chỉnh để xử lý các từ mà bạn chưa từng thấy trước đây.
Đây là cách câu của chúng ta trông sau khi chuẩn hóa từ thêm vào dạng gốc của động từ của chúng ta:
Thay đổi duy nhất chúng ta đã thực hiện là biến "is" thành "be".
Bước 5: Xác định từ dừng (Identifying Stop Words)
Tiếp theo, chúng ta muốn xem xét tầm quan trọng của mỗi từ trong câu. Tiếng Anh có rất nhiều từ đệm xuất hiện rất thường xuyên như "and", "the" và "a". Khi thực hiện thống kê trên văn bản, những từ này gây ra rất nhiều nhiễu vì chúng xuất hiện thường xuyên hơn nhiều so với các từ khác. Một số quy trình NLP sẽ gắn cờ chúng là từ dừng - tức là các từ mà bạn có thể muốn lọc ra trước khi thực hiện bất kỳ phân tích thống kê nào.
Đây là cách câu của chúng ta trông với các từ dừng được làm mờ:
Các từ dừng thường được xác định chỉ bằng cách kiểm tra một danh sách cứng các từ dừng đã biết. Nhưng không có danh sách từ dừng tiêu chuẩn nào phù hợp cho tất cả các ứng dụng. Danh sách các từ cần bỏ qua có thể thay đổi tùy thuộc vào ứng dụng của bạn.
Ví dụ, nếu bạn đang xây dựng một công cụ tìm kiếm ban nhạc rock, bạn muốn đảm bảo rằng bạn không bỏ qua từ "The". Bởi vì không chỉ từ "The" xuất hiện trong rất nhiều tên ban nhạc, mà còn có một ban nhạc rock nổi tiếng những năm 1980 tên là The The!
Bước 6: Phân tích phụ thuộc (Dependency Parsing)
Bước tiếp theo là tìm hiểu cách tất cả các từ trong câu của chúng ta liên quan đến nhau. Điều này được gọi là phân tích phụ thuộc.
Mục tiêu là xây dựng một cây gán một từ cha duy nhất cho mỗi từ trong câu. Gốc của cây sẽ là động từ chính trong câu. Đây là cách bắt đầu của cây phân tích sẽ trông như thế nào đối với câu của chúng ta:
Nhưng chúng ta có thể tiến thêm một bước nữa. Ngoài việc xác định từ cha của mỗi từ, chúng ta cũng có thể dự đoán loại mối quan hệ tồn tại giữa hai từ đó:
Cây phân tích này cho chúng ta thấy rằng chủ ngữ của câu là danh từ "London" và nó có mối quan hệ "be" với "capital". Cuối cùng chúng ta biết được điều gì đó hữu ích - London là một thủ đô! Và nếu chúng ta theo dõi cây phân tích hoàn chỉnh cho câu (ngoài những gì được hiển thị), chúng ta thậm chí sẽ tìm ra rằng London là thủ đô của Vương quốc Anh.Giống như cách chúng ta đã dự đoán loại từ trước đó bằng cách sử dụng một mô hình học máy, phân tích phụ thuộc cũng hoạt động bằng cách đưa các từ vào một mô hình học máy và xuất ra kết quả. Nhưng phân tích phụ thuộc từ là một nhiệm vụ đặc biệt phức tạp và sẽ cần một bài viết riêng để giải thích chi tiết. Nếu bạn tò mò về cách nó hoạt động, một nơi tuyệt vời để bắt đầu đọc là bài viết xuất sắc của Matthew Honnibal "Parsing English in 500 Lines of Python".
Nhưng mặc dù có một ghi chú từ tác giả vào năm 2015 nói rằng cách tiếp cận này hiện là tiêu chuẩn, nhưng nó thực sự đã lỗi thời và thậm chí không còn được tác giả sử dụng nữa. Năm 2016, Google đã phát hành một trình phân tích phụ thuộc mới có tên Parsey McParseface, vượt trội hơn các điểm chuẩn trước đó bằng cách sử dụng một cách tiếp cận học sâu mới nhanh chóng lan rộng khắp ngành. Sau đó một năm, họ đã phát hành một mô hình thậm chí còn mới hơn có tên ParseySaurus, cải thiện mọi thứ hơn nữa. Nói cách khác, các kỹ thuật phân tích vẫn là một lĩnh vực nghiên cứu tích cực và liên tục thay đổi và cải thiện.
Cũng cần nhớ rằng nhiều câu tiếng Anh mơ hồ và thực sự rất khó phân tích. Trong những trường hợp đó, mô hình sẽ đoán dựa trên phiên bản được phân tích của câu có vẻ hợp lý nhất nhưng nó không hoàn hảo và đôi khi mô hình sẽ sai một cách đáng xấu hổ. Nhưng theo thời gian, các mô hình NLP của chúng ta sẽ tiếp tục tốt hơn trong việc phân tích văn bản một cách hợp lý.
Bạn muốn thử phân tích phụ thuộc trên câu của riêng mình? Có một bản demo tương tác tuyệt vời từ nhóm spaCy tại đây.
https://demos.explosion.ai/displacy
Bước 6b: Tìm cụm danh từ (Finding Noun Phrases)
Cho đến nay, chúng ta đã coi mỗi từ trong câu của mình là một thực thể riêng biệt. Nhưng đôi khi, việc nhóm các từ đại diện cho một ý tưởng hoặc sự vật duy nhất có ý nghĩa hơn. Chúng ta có thể sử dụng thông tin từ cây phân tích phụ thuộc để tự động nhóm các từ đều nói về cùng một thứ.
Chúng ta có thể nhóm các cụm danh từ để tạo ra điều này:
Việc chúng ta thực hiện bước này hay không phụ thuộc vào mục tiêu cuối cùng của chúng ta. Nhưng nó thường là một cách nhanh chóng và dễ dàng để đơn giản hóa câu nếu chúng ta không cần thêm chi tiết về từ nào là tính từ và thay vào đó quan tâm nhiều hơn đến việc trích xuất các ý tưởng hoàn chỉnh.
Bước 7: Nhận dạng thực thể có tên (Named Entity Recognition - NER)
Bây giờ chúng ta đã hoàn thành tất cả công việc khó khăn đó, cuối cùng chúng ta có thể vượt ra ngoài ngữ pháp cấp tiểu học và bắt đầu thực sự trích xuất ý tưởng.
Trong câu của chúng ta, chúng ta có các danh từ sau:
Một số danh từ này đại diện cho những thứ có thật trên thế giới. Ví dụ, "London", "England" và "United Kingdom" đại diện cho các địa điểm vật lý trên bản đồ. Sẽ rất tuyệt nếu có thể phát hiện ra điều đó! Với thông tin đó, chúng ta có thể tự động trích xuất danh sách các địa điểm trong thế giới thực được đề cập trong tài liệu bằng cách sử dụng NLP.Mục tiêu của Nhận dạng thực thể có tên, hay NER, là phát hiện và gắn nhãn các danh từ này với các khái niệm trong thế giới thực mà chúng đại diện. Đây là cách câu của chúng ta trông sau khi chạy mỗi mã thông báo qua mô hình gắn thẻ NER của chúng ta:
Nhưng các hệ thống NER không chỉ thực hiện tra cứu từ điển đơn giản. Thay vào đó, chúng đang sử dụng ngữ cảnh về cách một từ xuất hiện trong câu và một mô hình thống kê để đoán loại danh từ mà một từ đại diện. Một hệ thống NER tốt có thể phân biệt giữa "Brooklyn Decker" là người và địa điểm "Brooklyn" bằng cách sử dụng các manh mối ngữ cảnh.Đây chỉ là một số loại đối tượng mà một hệ thống NER điển hình có thể gắn thẻ:
* Tên người
* Tên công ty
* Vị trí địa lý (Cả vật lý và chính trị)
* Tên sản phẩm
* Ngày và giờ
* Số tiền
* Tên sự kiện
NER có rất nhiều công dụng vì nó giúp dễ dàng lấy dữ liệu có cấu trúc từ văn bản. Đó là một trong những cách dễ nhất để nhanh chóng có được giá trị từ một quy trình NLP.
Bạn muốn tự mình thử Nhận dạng thực thể có tên? Có một bản demo tương tác tuyệt vời khác từ spaCy tại đây.
https://demos.explosion.ai/displacy-ent
Bước 8: Giải quyết đồng tham chiếu (Coreference Resolution)
Tại thời điểm này, chúng ta đã có một biểu diễn hữu ích của câu của chúng ta. Chúng ta biết loại từ cho mỗi từ, cách các từ liên quan đến nhau và từ nào đang nói về các thực thể có tên.
Tuy nhiên, chúng ta vẫn còn một vấn đề lớn. Tiếng Anh có rất nhiều đại từ - những từ như he, she và it. Đây là những cách viết tắt mà chúng ta sử dụng thay vì viết tên lặp đi lặp lại trong mỗi câu. Con người có thể theo dõi những gì những từ này đại diện dựa trên ngữ cảnh. Nhưng mô hình NLP của chúng ta không biết đại từ có nghĩa là gì vì nó chỉ kiểm tra từng câu một.
Hãy xem câu thứ ba trong tài liệu của chúng ta:
"It was founded by the Romans, who named it Londinium."
Nếu chúng ta phân tích điều này bằng quy trình NLP của chúng ta, chúng ta sẽ biết rằng "it" được thành lập bởi người La Mã. Nhưng sẽ hữu ích hơn nhiều nếu biết rằng "London" được thành lập bởi người La Mã.
Là một người đọc câu này, bạn có thể dễ dàng tìm ra rằng "it" có nghĩa là "London". Mục tiêu của giải quyết đồng tham chiếu là tìm ra cùng một ánh xạ này bằng cách theo dõi các đại từ trong các câu. Chúng ta muốn tìm ra tất cả các từ đang đề cập đến cùng một thực thể.
Đây là kết quả của việc chạy giải quyết đồng tham chiếu trên tài liệu của chúng ta cho từ "London":
Với thông tin đồng tham chiếu kết hợp với cây phân tích và thông tin thực thể có tên, chúng ta sẽ có thể hiểu rõ hơn về văn bản. Giải quyết đồng tham chiếu là một bước tùy chọn không phải lúc nào cũng được thực hiện.
Tổng kết lại thì đây là một quy trình NLP:
Chà, có rất nhiều bước!
Lưu ý: Trước khi chúng ta tiếp tục, điều đáng nói là đây là các bước trong một quy trình NLP điển hình, nhưng bạn sẽ bỏ qua các bước hoặc sắp xếp lại các bước tùy thuộc vào những gì bạn muốn làm và cách thư viện NLP của bạn được triển khai. Ví dụ, một số thư viện như spaCy thực hiện phân đoạn câu muộn hơn nhiều trong quy trình bằng cách sử dụng kết quả của phân tích phụ thuộc.
Vậy làm thế nào để chúng ta mã hóa quy trình này? Nhờ các thư viện python tuyệt vời như spaCy, nó đã được thực hiện! Các bước đều được mã hóa và sẵn sàng để bạn sử dụng.
Đầu tiên, giả sử bạn đã cài đặt Python 3, bạn có thể cài đặt spaCy như sau:
```python
# Cài đặt spaCy
pip3 install -U spacy
# Tải xuống mô hình tiếng Anh lớn cho spaCy
python3 -m spacy download en_core_web_lg
# Cài đặt textacy cũng sẽ hữu ích
pip3 install -U textacy
```
Sau đó, mã để chạy một quy trình NLP trên một đoạn văn bản trông như thế này:
```python
import spacy
# Tải mô hình NLP tiếng Anh lớn
nlp = spacy.load('en_core_web_lg')
# Văn bản chúng ta muốn kiểm tra
text = """London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium.
"""
# Phân tích văn bản với spaCy. Điều này chạy toàn bộ quy trình.
doc = nlp(text)
# 'doc' bây giờ chứa một phiên bản văn bản đã được phân tích. Chúng ta có thể sử dụng nó để làm bất cứ điều gì chúng ta muốn!
# Ví dụ, điều này sẽ in ra tất cả các thực thể có tên đã được phát hiện:
for entity in doc.ents:
print(f"{entity.text} ({entity.label_})")
```
Nếu bạn chạy đoạn mã đó, bạn sẽ nhận được danh sách các thực thể có tên và loại thực thể được phát hiện trong tài liệu của chúng ta:
```
London (GPE)
England (GPE)
the United Kingdom (GPE)
the River Thames (FAC)
Great Britain (GPE)
London (GPE)
two millennia (DATE)
Romans (NORP)
Londinium (PERSON)
```
Bạn có thể tra cứu ý nghĩa của từng mã thực thể tại đây.
Lưu ý rằng nó mắc lỗi với "Londinium" và nghĩ rằng đó là tên của một người thay vì một địa điểm. Điều này có lẽ là do không có gì trong tập dữ liệu đào tạo tương tự như vậy và nó đã đoán tốt nhất. Phát hiện thực thể có tên thường yêu cầu một chút tinh chỉnh mô hình nếu bạn đang phân tích văn bản có các thuật ngữ độc đáo hoặc chuyên biệt như thế này.
Hãy lấy ý tưởng phát hiện thực thể và xoay nó để xây dựng một trình làm sạch dữ liệu. Giả sử bạn đang cố gắng tuân thủ các quy định bảo mật GDPR mới và bạn đã phát hiện ra rằng bạn có hàng ngàn tài liệu chứa thông tin nhận dạng cá nhân như tên người. Bạn đã được giao nhiệm vụ xóa bất kỳ và tất cả các tên khỏi tài liệu của mình.
Đi qua hàng ngàn tài liệu và cố gắng biên tập tất cả các tên bằng tay có thể mất nhiều năm. Nhưng với NLP, điều đó thật dễ dàng. Đây là một trình làm sạch đơn giản loại bỏ tất cả các tên mà nó phát hiện:
```python
import spacy
# Tải mô hình NLP tiếng Anh lớn
nlp = spacy.load('en_core_web_lg')
# Thay thế một mã thông báo bằng "[REDACTED]" nếu đó là tên
def replace_name_with_placeholder(token):
if token.ent_iob != 0 and token.ent_type_ == "PERSON":
return "[REDACTED] "
else:
return token.string
# Lặp qua tất cả các thực thể trong tài liệu và kiểm tra xem chúng có phải là tên không
def scrub(text):
doc = nlp(text)
for ent in doc.ents:
ent.merge()
tokens = map(replace_name_with_placeholder, doc)
return "".join(tokens)
s = """
In 1950, Alan Turing published his famous article "Computing Machinery and Intelligence". In 1957, Noam Chomsky's Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures.
"""
print(scrub(s))
```
Và nếu bạn chạy đoạn mã đó, bạn sẽ thấy rằng nó hoạt động như mong đợi:
```
In 1950, [REDACTED] published his famous article "Computing Machinery and Intelligence". In 1957, [REDACTED] Syntactic Structures revolutionized Linguistics with 'universal grammar', a rule based system of syntactic structures.
```
## Trích xuất sự kiện (Extracting Facts)
Những gì bạn có thể làm với spaCy ngay lập tức thật đáng kinh ngạc. Nhưng bạn cũng có thể sử dụng đầu ra đã phân tích từ spaCy làm đầu vào cho các thuật toán trích xuất dữ liệu phức tạp hơn.
Có một thư viện python tên là textacy triển khai một số thuật toán trích xuất dữ liệu phổ biến trên spaCy. Đó là một điểm khởi đầu tuyệt vời.
Một trong những thuật toán mà nó triển khai được gọi là Trích xuất câu lệnh bán cấu trúc (Semi-structured Statement Extraction). Chúng ta có thể sử dụng nó để tìm kiếm cây phân tích cho các câu lệnh đơn giản trong đó chủ ngữ là "London" và động từ là một dạng của "be". Điều đó sẽ giúp chúng ta tìm thấy các sự kiện về London.
Đây là cách nó biểu diễn trong mã:
```python
import spacy
import textacy.extract
# Tải mô hình NLP tiếng Anh lớn
nlp = spacy.load('en_core_web_lg')
# Văn bản chúng ta muốn kiểm tra
text = """London is the capital and most populous city of England and the United Kingdom. Standing on the River Thames in the south east of the island of Great Britain, London has been a major settlement for two millennia. It was founded by the Romans, who named it Londinium.
"""
# Phân tích tài liệu với spaCy
doc = nlp(text)
# Trích xuất câu lệnh bán cấu trúc
statements = textacy.extract.semistructured_statements(doc, "London")
# In kết quả
print("Here are the things I know about London:")
for statement in statements:
subject, verb, fact = statement
print(f" - {fact}")
```
Và đây là những gì nó in ra:
```
Here are the things I know about London:
- the capital and most populous city of England and the United Kingdom.
- a major settlement for two millennia.
```
Có lẽ điều đó không quá ấn tượng. Nhưng nếu bạn chạy cùng một mã đó trên toàn bộ văn bản bài viết Wikipedia về London thay vì chỉ ba câu, bạn sẽ nhận được kết quả ấn tượng hơn này:
```
Here are the things I know about London:
- the capital and most populous city of England and the United Kingdom
- a major settlement for two millennia
- the world's most populous city from around 1831 to 1925
- beyond all comparison the largest town in England
- still very compact
- the world's largest city from about 1831 to 1925
- the seat of the Government of the United Kingdom
- vulnerable to flooding
- "one of the World's Greenest Cities" with more than 40 percent green space or open water
- the most populous city and metropolitan area of the European Union and the second most populous in Europe
- the 19th largest city and the 18th largest metropolitan region in the world
- Christian, and has a large number of churches, particularly in the City of London
- also home to sizeable Muslim, Hindu, Sikh, and Jewish communities
- also home to 42 Hindu temples
- the world's most expensive office market for the last three years according to world property journal (2015) report
- one of the pre-eminent financial centres of the world as the most important location for international finance
- the world top city destination as ranked by TripAdvisor users
- a major international air transport hub with the busiest city airspace in the world
- the centre of the National Rail network, with 70 percent of rail journeys starting or ending in London
- a major global centre of higher education teaching and research and has the largest concentration of higher education institutes in Europe
- home to designers Vivienne Westwood, Galliano, Stella McCartney, Manolo Blahnik, and Jimmy Choo, among others
- the setting for many works of literature
- a major centre for television production, with studios including BBC Television Centre, The Fountain Studios and The London Studios
- also a centre for urban music
- the "greenest city" in Europe with 35,000 acres of public parks, woodlands and gardens
- not the capital of England, as England does not have its own government
```
Bây giờ mọi thứ đang trở nên thú vị! Đó là một lượng thông tin khá ấn tượng mà chúng ta đã thu thập được tự động.
Để có thêm điểm cộng, hãy thử cài đặt thư viện neuralcoref và thêm Giải quyết đồng tham chiếu vào quy trình của bạn. Điều đó sẽ giúp bạn có thêm một vài sự kiện vì nó sẽ bắt được các câu nói về "it" thay vì trực tiếp đề cập đến "London".
Chúng ta có thể làm gì khác?
Bằng cách xem qua tài liệu spaCy và tài liệu textacy, bạn sẽ thấy rất nhiều ví dụ về cách bạn có thể làm việc với văn bản đã được phân tích. Những gì chúng ta đã thấy cho đến nay chỉ là một mẫu nhỏ.
Đây là một ví dụ thực tế khác: Hãy tưởng tượng rằng bạn đang xây dựng một trang web cho phép người dùng xem thông tin cho mọi thành phố trên thế giới bằng cách sử dụng thông tin chúng ta đã trích xuất trong ví dụ cuối cùng.
Nếu bạn có tính năng tìm kiếm trên trang web, sẽ rất tuyệt nếu tự động hoàn thành các truy vấn tìm kiếm phổ biến như Google làm:
Đề xuất tự động hoàn thành của Google cho "London"
Nhưng để làm điều này, chúng ta cần một danh sách các hoàn thành có thể để đề xuất cho người dùng. Chúng ta có thể sử dụng NLP để nhanh chóng tạo ra dữ liệu này.
Đây là một cách để trích xuất các cụm danh từ được đề cập thường xuyên từ một tài liệu:
```python
import spacy
import textacy.extract
# Tải mô hình NLP tiếng Anh lớn
nlp = spacy.load('en_core_web_lg')
# Văn bản chúng ta muốn kiểm tra
text = """London is [.. shortened for space ..]"""
# Phân tích tài liệu với spaCy
doc = nlp(text)
# Trích xuất các cụm danh từ xuất hiện
noun_chunks = textacy.extract.noun_chunks(doc, min_freq=3)
# Chuyển đổi các cụm danh từ thành chuỗi chữ thường
noun_chunks = map(str, noun_chunks)
noun_chunks = map(str.lower, noun_chunks)
# In ra bất kỳ danh từ nào có ít nhất 2 từ
for noun_chunk in set(noun_chunks):
if len(noun_chunk.split(" ")) > 1:
print(noun_chunk)
```
Nếu bạn chạy đoạn mã đó trên bài viết Wikipedia về London, bạn sẽ nhận được đầu ra như thế này:
```
westminster abbey
natural history museum
west end
east end
st paul's cathedral
royal albert hall
london underground
great fire
british museum
london eye
.... etc ....
```
Đi sâu hơn
Đây chỉ là một phần nhỏ những gì bạn có thể làm với NLP. Trong các bài đăng trong tương lai, chúng ta sẽ nói về các ứng dụng khác của NLP như Phân loại văn bản và cách các hệ thống như Amazon Alexa phân tích câu hỏi.
Nhưng cho đến lúc đó, hãy cài đặt spaCy và bắt đầu thử nghiệm! Hoặc nếu bạn không phải là người dùng Python và cuối cùng sử dụng một thư viện NLP khác, các ý tưởng đều sẽ hoạt động gần như theo cùng một cách.