Gensim - Tạo từ điển
Trong chương trước, nơi chúng ta đã thảo luận về vector và mô hình, bạn đã có một ý tưởng về từ điển. Ở đây, chúng ta sẽ thảo luận vềDictionary đối tượng chi tiết hơn một chút.
Từ điển là gì?
Trước khi đi sâu vào khái niệm từ điển, chúng ta hãy hiểu một số khái niệm NLP đơn giản -
Token - Mã thông báo có nghĩa là một 'từ'.
Document - Một văn bản đề cập đến một câu hoặc đoạn văn.
Corpus - Nó đề cập đến một tập hợp các tài liệu như một túi từ (BoW).
Đối với tất cả các tài liệu, một kho tài liệu luôn chứa id mã thông báo của mỗi từ cùng với số lượng tần suất của nó trong tài liệu.
Hãy chuyển sang khái niệm từ điển trong Gensim. Để làm việc trên các tài liệu văn bản, Gensim cũng yêu cầu các từ, tức là mã thông báo phải được chuyển đổi thành id duy nhất của chúng. Để đạt được điều này, nó mang lại cho chúng tôi cơ sởDictionary object, ánh xạ mỗi từ với id số nguyên duy nhất của chúng. Nó thực hiện điều này bằng cách chuyển đổi văn bản đầu vào thành danh sách các từ và sau đó chuyển nó đếncorpora.Dictionary() vật.
Cần từ điển
Bây giờ câu hỏi đặt ra là thực sự nhu cầu của đối tượng từ điển là gì và nó có thể được sử dụng ở đâu? Trong Gensim, đối tượng từ điển được sử dụng để tạo một kho từ ngữ (BoW), được dùng làm đầu vào cho mô hình chủ đề và các mô hình khác.
Các dạng nhập văn bản
Có ba dạng văn bản đầu vào khác nhau, chúng tôi có thể cung cấp cho Gensim -
Là các câu được lưu trữ trong đối tượng danh sách gốc của Python (được gọi là str trong Python 3)
Là một tệp văn bản duy nhất (có thể là tệp nhỏ hoặc lớn)
Nhiều tệp văn bản
Tạo từ điển bằng Gensim
Như đã thảo luận, trong Gensim, từ điển chứa ánh xạ của tất cả các từ, còn gọi là mã thông báo đến id số nguyên duy nhất của chúng. Chúng ta có thể tạo từ điển từ danh sách các câu, từ một hoặc nhiều tệp văn bản (tệp văn bản chứa nhiều dòng văn bản). Vì vậy, trước tiên hãy bắt đầu bằng cách tạo từ điển bằng cách sử dụng danh sách các câu.
Từ một danh sách các câu
Trong ví dụ sau, chúng ta sẽ tạo từ điển từ một danh sách các câu. Khi chúng ta có danh sách các câu hoặc bạn có thể nói nhiều câu, chúng ta phải chuyển mọi câu thành danh sách các từ và cách hiểu là một trong những cách rất phổ biến để làm điều này.
Ví dụ triển khai
Đầu tiên, nhập các gói cần thiết và cần thiết như sau:
import gensim
from gensim import corpora
from pprint import pprint
Tiếp theo, tạo danh sách hiểu từ danh sách các câu / tài liệu để sử dụng nó tạo từ điển -
doc = [
"CNTK formerly known as Computational Network Toolkit",
"is a free easy-to-use open-source commercial-grade toolkit",
"that enable us to train deep learning algorithms to learn like the human brain."
]
Tiếp theo, chúng ta cần tách các câu thành các từ. Nó được gọi là mã hóa.
text_tokens = [[text for text in doc.split()] for doc in doc]
Bây giờ, với sự trợ giúp của tập lệnh sau, chúng ta có thể tạo từ điển -
dict_LoS = corpora.Dictionary(text_tokens)
Bây giờ chúng ta hãy lấy thêm một số thông tin như số lượng mã thông báo trong từ điển -
print(dict_LoS)
Đầu ra
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Chúng ta cũng có thể thấy ánh xạ từ đến số nguyên duy nhất như sau:
print(dict_LoS.token2id)
Đầu ra
{
'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4,
'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9,
'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14,
'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19, 'learning': 20,
'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}
Hoàn thành ví dụ triển khai
import gensim
from gensim import corpora
from pprint import pprint
doc = [
"CNTK formerly known as Computational Network Toolkit",
"is a free easy-to-use open-source commercial-grade toolkit",
"that enable us to train deep learning algorithms to learn like the human brain."
]
text_tokens = [[text for text in doc.split()] for doc in doc]
dict_LoS = corpora.Dictionary(text_tokens)
print(dict_LoS.token2id)
Từ một tệp văn bản
Trong ví dụ sau, chúng tôi sẽ tạo từ điển từ một tệp văn bản. Theo cách tương tự, chúng ta cũng có thể tạo từ điển từ nhiều hơn một tệp văn bản (tức là thư mục của tệp).
Đối với điều này, chúng tôi đã lưu tài liệu, được sử dụng trong ví dụ trước, trong tệp văn bản có tên doc.txt. Gensim sẽ đọc từng dòng tệp và xử lý từng dòng một bằng cách sử dụngsimple_preprocess. Theo cách này, nó không cần tải toàn bộ tệp hoàn chỉnh trong bộ nhớ cùng một lúc.
Ví dụ triển khai
Đầu tiên, nhập các gói cần thiết và cần thiết như sau:
import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
Dòng mã tiếp theo sẽ tạo từ điển gensim bằng cách sử dụng tệp văn bản duy nhất có tên doc.txt -
dict_STF = corpora.Dictionary(
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)
Bây giờ chúng ta hãy lấy thêm một số thông tin như số lượng mã thông báo trong từ điển -
print(dict_STF)
Đầu ra
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Chúng ta cũng có thể thấy ánh xạ từ đến số nguyên duy nhất như sau:
print(dict_STF.token2id)
Đầu ra
{
'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4,
'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9,
'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14,
'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19,
'learning': 20, 'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}
Hoàn thành ví dụ triển khai
import gensim
from gensim import corpora
from pprint import pprint
from gensim.utils import simple_preprocess
from smart_open import smart_open
import os
dict_STF = corpora.Dictionary(
simple_preprocess(line, deacc =True) for line in open(‘doc.txt’, encoding=’utf-8’)
)
dict_STF = corpora.Dictionary(text_tokens)
print(dict_STF.token2id)
Từ nhiều tệp văn bản
Bây giờ chúng ta hãy tạo từ điển từ nhiều tệp, tức là nhiều hơn một tệp văn bản được lưu trong cùng một thư mục. Đối với ví dụ này, chúng tôi đã tạo ba tệp văn bản khác nhau, cụ thể làfirst.txt, second.txt và third.txtchứa ba dòng từ tệp văn bản (doc.txt), chúng tôi đã sử dụng cho ví dụ trước. Tất cả ba tệp văn bản này được lưu trong một thư mục có tênABC.
Ví dụ triển khai
Để thực hiện điều này, chúng ta cần xác định một lớp với một phương thức có thể lặp lại qua tất cả ba tệp văn bản (First, Second và Third.txt) trong thư mục (ABC) và mang lại danh sách các mã thông báo từ đã xử lý.
Hãy xác định lớp có tên Read_files có một phương thức có tên __iteration__ () như sau -
class Read_files(object):
def __init__(self, directoryname):
elf.directoryname = directoryname
def __iter__(self):
for fname in os.listdir(self.directoryname):
for line in open(os.path.join(self.directoryname, fname), encoding='latin'):
yield simple_preprocess(line)
Tiếp theo, chúng ta cần cung cấp đường dẫn của thư mục như sau:
path = "ABC"
#provide the path as per your computer system where you saved the directory.
Các bước tiếp theo tương tự như chúng ta đã làm trong các ví dụ trước. Dòng mã tiếp theo sẽ tạo thư mục Gensim bằng cách sử dụng thư mục có ba tệp văn bản -
dict_MUL = corpora.Dictionary(Read_files(path))
Đầu ra
Dictionary(27 unique tokens: ['CNTK', 'Computational', 'Network', 'Toolkit', 'as']...)
Bây giờ chúng ta cũng có thể thấy ánh xạ từ sang số nguyên duy nhất như sau:
print(dict_MUL.token2id)
Đầu ra
{
'CNTK': 0, 'Computational': 1, 'Network': 2, 'Toolkit': 3, 'as': 4,
'formerly': 5, 'known': 6, 'a': 7, 'commercial-grade': 8, 'easy-to-use': 9,
'free': 10, 'is': 11, 'open-source': 12, 'toolkit': 13, 'algorithms': 14,
'brain.': 15, 'deep': 16, 'enable': 17, 'human': 18, 'learn': 19,
'learning': 20, 'like': 21, 'that': 22, 'the': 23, 'to': 24, 'train': 25, 'us': 26
}
Lưu và tải từ điển Gensim
Gensim hỗ trợ bản địa của họ save() phương pháp lưu từ điển vào đĩa và load() phương pháp tải lại từ điển từ đĩa.
Ví dụ: chúng ta có thể lưu từ điển với sự trợ giúp của tập lệnh sau:
Gensim.corpora.dictionary.save(filename)
#provide the path where you want to save the dictionary.
Tương tự, chúng ta có thể tải từ điển đã lưu bằng cách sử dụng phương thức load (). Tập lệnh sau có thể làm điều này -
Gensim.corpora.dictionary.load(filename)
#provide the path where you have saved the dictionary.