Nhúng từ là gì?
Nhúng từ là một kiểu biểu diễn từ cho phép các từ có nghĩa tương tự có thể hiểu được bằng các thuật toán học máy. Về mặt kỹ thuật, nó là một ánh xạ các từ thành vectơ của số thực bằng cách sử dụng mạng nơ-ron, mô hình xác suất hoặc giảm thứ nguyên trên ma trận đồng xuất hiện từ. Đó là kỹ thuật mô hình hóa ngôn ngữ và học tính năng. Nhúng từ là một cách để thực hiện ánh xạ bằng mạng nơ-ron. Có nhiều mô hình nhúng từ khác nhau có sẵn như word2vec (Google), Glove (Stanford) và nhanh nhất (Facebook).
Word Embedding còn được gọi là mô hình ngữ nghĩa phân tán hoặc mô hình không gian vectơ được biểu diễn hoặc ngữ nghĩa phân tán hoặc mô hình không gian vectơ. Khi bạn đọc những cái tên này, bạn bắt gặp từ ngữ nghĩa có nghĩa là phân loại các từ tương tự với nhau. Ví dụ như trái cây như táo, xoài, chuối nên được đặt gần trong khi những cuốn sách sẽ ở xa những từ này. Theo nghĩa rộng hơn, việc nhúng từ sẽ tạo ra vectơ trái cây sẽ được đặt cách xa biểu diễn vectơ của sách.
Trong hướng dẫn này, bạn sẽ học
- Nhúng từ là gì?
- Nhúng Word được sử dụng ở đâu?
- Word2vec là gì?
- Word2vec làm gì?
- Tại sao sử dụng Word2vec?
- Kiến trúc Word2vec
- Túi từ liên tục.
- Mô hình Skip-Gram
- Mối quan hệ giữa Word2vec và NLTK
- Trình kích hoạt và Word2Vec
- Gensim là gì?
- Thực thi mã word2vec bằng Gensim
Nhúng Word được sử dụng ở đâu?
Tính năng nhúng từ giúp trong các tác vụ tạo tính năng, phân cụm tài liệu, phân loại văn bản và xử lý ngôn ngữ tự nhiên. Hãy để chúng tôi liệt kê chúng và thảo luận về từng ứng dụng này.
- Tính toán các từ tương tự: Nhúng từ được sử dụng để đề xuất các từ tương tự với từ được đưa vào mô hình dự đoán. Cùng với đó, nó cũng gợi ý những từ không giống nhau, cũng như những từ thông dụng nhất.
- Tạo một nhóm các từ liên quan: Nó được sử dụng để nhóm ngữ nghĩa, nhóm các từ này sẽ nhóm những thứ có đặc điểm giống nhau lại với nhau và khác xa nhau.
- Tính năng phân loại văn bản: Văn bản được ánh xạ thành các mảng vectơ được đưa vào mô hình để đào tạo cũng như dự đoán. Mô hình bộ phân loại dựa trên văn bản không thể được đào tạo trên chuỗi, vì vậy điều này sẽ chuyển đổi văn bản thành dạng máy có thể đào tạo. Hơn nữa các tính năng của nó trong việc xây dựng trợ giúp ngữ nghĩa trong phân loại dựa trên văn bản.
- Phân cụm tài liệu là một ứng dụng khác trong đó nhúng từ được sử dụng rộng rãi
- Xử lý ngôn ngữ tự nhiên: Có nhiều ứng dụng mà tính năng nhúng từ rất hữu ích và giành chiến thắng trong các giai đoạn trích xuất tính năng, chẳng hạn như các phần của gắn thẻ giọng nói, phân tích tình cảm và phân tích cú pháp.
Bây giờ chúng ta đã có một số kiến thức về nhúng từ. Một số ánh sáng cũng được chiếu vào các mô hình khác nhau để thực hiện nhúng từ. Toàn bộ hướng dẫn này tập trung vào một trong các mô hình (word2vec).
Word2vec là gì?
Word2vec là kỹ thuật / mô hình để sản xuất nhúng từ để biểu diễn từ tốt hơn. Nó nắm bắt một số lượng lớn các mối quan hệ từ cú pháp và ngữ nghĩa chính xác. Nó là một mạng nơ-ron hai lớp nông. Trước khi đi sâu hơn, vui lòng xem sự khác biệt giữa mạng nơ-ron nông và sâu:
Mạng nơ-ron nông chỉ bao gồm một lớp ẩn giữa đầu vào và đầu ra trong khi mạng nơ-ron sâu chứa nhiều lớp ẩn giữa đầu vào và đầu ra. Đầu vào là đối tượng của các nút trong khi lớp ẩn, cũng như lớp đầu ra, chứa các nơ-ron.
Hình: Học sâu so với Shallow
word2vec là một mạng hai lớp trong đó có đầu vào là một lớp ẩn và đầu ra.
Word2vec được phát triển bởi một nhóm nhà nghiên cứu do Tomas Mikolov đứng đầu tại Google. Word2vec tốt hơn và hiệu quả hơn mô hình phân tích ngữ nghĩa tiềm ẩn đó.
Word2vec làm gì?
Word2vec biểu diễn các từ trong biểu diễn không gian vectơ. Các từ được biểu diễn dưới dạng vectơ và vị trí được thực hiện theo cách sao cho các từ có nghĩa giống nhau xuất hiện cùng nhau và các từ khác nhau nằm ở xa nhau. Đây cũng được gọi là mối quan hệ ngữ nghĩa. Mạng nơ-ron không hiểu văn bản thay vào đó chúng chỉ hiểu các con số. Word Embedding cung cấp một cách để chuyển đổi văn bản thành một vectơ số.
Word2vec xây dựng lại ngữ cảnh ngôn ngữ của từ. Trước khi đi sâu hơn, chúng ta hãy hiểu, ngữ cảnh là gì? Trong kịch bản cuộc sống chung, khi chúng ta nói hoặc viết để giao tiếp, người khác cố gắng tìm ra mục tiêu của câu nói. Ví dụ, "Nhiệt độ của Ấn Độ là gì", ở đây ngữ cảnh là người dùng muốn biết "nhiệt độ của Ấn Độ" là ngữ cảnh. Tóm lại, mục tiêu chính của câu là ngữ cảnh. Từ hoặc câu xung quanh ngôn ngữ nói hoặc viết (tiết lộ) giúp xác định ý nghĩa của ngữ cảnh. Word2vec học cách biểu diễn vector của các từ thông qua các ngữ cảnh.
Tại sao sử dụng Word2vec?
Trước khi Nhúng Word
Điều quan trọng là phải biết cách tiếp cận nào được sử dụng trước khi nhúng từ và điểm kém của nó là gì và sau đó chúng ta sẽ chuyển sang chủ đề về cách khắc phục điểm kém bằng cách nhúng Word sử dụng cách tiếp cận word2vec. Cuối cùng, chúng ta sẽ chuyển cách hoạt động của word2vec vì điều quan trọng là phải hiểu nó đang hoạt động.
Phương pháp tiếp cận để phân tích ngữ nghĩa tiềm ẩn
Đây là cách tiếp cận đã được sử dụng trước khi nhúng từ. Nó sử dụng khái niệm Túi từ trong đó các từ được biểu diễn dưới dạng các vectơ được mã hóa. Nó là một biểu diễn vectơ thưa thớt trong đó kích thước bằng kích thước của từ vựng. Nếu từ xuất hiện trong từ điển, nó được tính, nếu không. Để hiểu thêm, vui lòng xem chương trình bên dưới.
from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())
Đầu ra:
[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']
Giải thích mã
- CountVectorizer là mô-đun được sử dụng để lưu trữ từ vựng dựa trên việc điều chỉnh các từ trong đó. Cái này được nhập từ sklearn
- Tạo đối tượng bằng cách sử dụng lớp CountVectorizer.
- Ghi dữ liệu vào danh sách sẽ được trang bị trong CountVectorizer.
- Dữ liệu phù hợp với đối tượng được tạo từ lớp CountVectorizer.
- Áp dụng phương pháp tiếp cận từ vựng để đếm số từ trong dữ liệu bằng cách sử dụng từ vựng. Nếu từ hoặc mã thông báo không có sẵn trong từ vựng, thì vị trí chỉ mục đó được đặt thành không.
- Biến ở dòng 5 là x được chuyển đổi thành một mảng (phương thức khả dụng cho x). Điều này sẽ cung cấp số lượng của mỗi mã thông báo trong câu hoặc danh sách được cung cấp trong Dòng 3.
- Điều này sẽ hiển thị các đặc điểm là một phần của từ vựng khi nó được trang bị bằng cách sử dụng dữ liệu trong Dòng 4.
Trong cách tiếp cận Ngữ nghĩa tiềm ẩn, hàng biểu thị các từ duy nhất trong khi cột biểu thị số thời gian mà từ đó xuất hiện trong tài liệu. Nó là một biểu diễn của các từ dưới dạng ma trận tài liệu. Tần suất tài liệu nghịch đảo Thuật ngữ-Tần suất (TFIDF) được sử dụng để đếm tần suất của các từ trong tài liệu là tần suất của thuật ngữ trong tài liệu / tần suất của thuật ngữ trong toàn bộ ngữ liệu.
Điểm thiếu sót của phương pháp Bag of Words
- Nó bỏ qua thứ tự của từ, ví dụ, this is bad = xấu là cái này.
- Nó bỏ qua ngữ cảnh của từ. Giả sử Nếu tôi viết câu "Anh ấy yêu sách. Giáo dục tốt nhất được tìm thấy trong sách". Nó sẽ tạo ra hai vectơ một cho "Anh ấy yêu sách" và một cho "Giáo dục tốt nhất được tìm thấy trong sách." Nó sẽ coi cả hai là trực giao khiến chúng độc lập, nhưng trên thực tế, chúng có liên quan với nhau
Để khắc phục những hạn chế này, nhúng từ đã được phát triển và word2vec là một cách tiếp cận để thực hiện như vậy.
Word2vec hoạt động như thế nào?
Word2vec học từ bằng cách dự đoán ngữ cảnh xung quanh của nó. Ví dụ, chúng ta hãy lấy từ "Anh ấy yêu bóng đá."
Chúng tôi muốn tính word2vec cho từ: yêu.
Giả sử
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Tình yêu từ di chuyển qua từng từ trong kho ngữ liệu. Cú pháp cũng như mối quan hệ ngữ nghĩa giữa các từ được mã hóa. Điều này giúp tìm kiếm các từ tương tự và loại suy.
Tất cả các tính năng ngẫu nhiên của từ yêu đều được tính toán. Các tính năng này được thay đổi hoặc cập nhật liên quan đến các từ hàng xóm hoặc ngữ cảnh với sự trợ giúp của phương pháp truyền ngược.
Một cách học khác là nếu ngữ cảnh của hai từ giống nhau hoặc hai từ có các đặc điểm giống nhau thì các từ đó có liên quan với nhau.
Kiến trúc Word2vec
Có hai kiến trúc được sử dụng bởi word2vec
- Túi từ liên tục (CBOW)
- bỏ qua gam
Trước khi đi sâu hơn, chúng ta hãy thảo luận lý do tại sao những kiến trúc hoặc mô hình này lại quan trọng theo quan điểm biểu diễn từ. Việc học biểu diễn từ về cơ bản là không được giám sát, nhưng các mục tiêu / nhãn là cần thiết để đào tạo mô hình. Skip-gram và CBOW chuyển đổi biểu diễn không được giám sát sang dạng có giám sát để đào tạo mô hình.
Trong CBOW, từ hiện tại được dự đoán bằng cách sử dụng cửa sổ của các cửa sổ ngữ cảnh xung quanh. Ví dụ: nếu w i-1 , w i-2 , w i + 1 , w i + 2 là các từ hoặc ngữ cảnh đã cho, thì mô hình này sẽ cung cấp w i
Skip-Gram hoạt động trái ngược với CBOW, ngụ ý rằng nó dự đoán trình tự hoặc ngữ cảnh nhất định từ từ. Bạn có thể đảo ngược ví dụ để hiểu nó. Nếu w i được đưa ra, điều này sẽ dự đoán ngữ cảnh hoặc w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec cung cấp một tùy chọn để chọn giữa CBOW (Túi từ liên tục) và skim-gram. Các thông số này được cung cấp trong quá trình đào tạo mô hình. Người ta có thể có tùy chọn sử dụng lấy mẫu âm hoặc lớp softmax phân cấp.
Túi từ liên tục.
Hãy để chúng tôi vẽ một sơ đồ đơn giản để hiểu túi liên tục của kiến trúc từ.
Hình túi liên tục của kiến trúc từ
Hãy để chúng tôi tính toán các phương trình bằng toán học. Giả sử V là kích thước từ vựng và N là kích thước lớp ẩn. Đầu vào được xác định là {x i-1 , x i-2, x i + 1, x i + 2 }. Ta thu được ma trận trọng số bằng cách nhân V * N. Một ma trận khác thu được bằng cách nhân vectơ đầu vào với ma trận trọng số. Điều này cũng có thể được hiểu theo phương trình sau đây.
h = xi t W
trong đó xi t ∧ W lần lượt là vectơ đầu vào và ma trận trọng số,
Để tính toán sự phù hợp giữa ngữ cảnh và từ tiếp theo, vui lòng tham khảo phương trình dưới đây
u = đại diện dự đoán * h
nơi mà sự trình bày dự đoán thu được mô hình∧h trong phương trình trên.
Mô hình Skip-Gram
Phương pháp Skip-Gram được sử dụng để dự đoán một câu có từ đầu vào. Để hiểu rõ hơn chúng ta hãy vẽ sơ đồ.
Hình Skip-Gram Mô hình
Người ta có thể coi nó như là mặt trái của mô hình túi liên tục trong đó đầu vào là từ và mô hình cung cấp ngữ cảnh hoặc trình tự. Chúng ta cũng có thể kết luận rằng mục tiêu được cung cấp cho lớp đầu vào và đầu ra được sao chép nhiều lần để phù hợp với số lượng từ ngữ cảnh đã chọn. Vectơ lỗi từ tất cả các lớp đầu ra được tổng hợp để điều chỉnh trọng số thông qua phương pháp lan truyền ngược.
Chọn mô hình nào?
CBOW nhanh hơn nhiều lần so với bỏ qua gam và cung cấp tần suất tốt hơn cho các từ thường xuyên trong khi bỏ qua gam cần một lượng nhỏ dữ liệu đào tạo và thể hiện ngay cả những từ hoặc cụm từ hiếm.
Mối quan hệ giữa Word2vec và NLTK
NLTK là bộ công cụ Ngôn ngữ tự nhiên. Nó được sử dụng để xử lý trước văn bản. Người ta có thể thực hiện các thao tác khác nhau chẳng hạn như các phần của gắn thẻ giọng nói, lemmatizing, cắt gốc, ngắt từ loại bỏ, loại bỏ các từ hiếm hoặc các từ ít được sử dụng nhất. Nó giúp làm sạch văn bản cũng như giúp chuẩn bị các tính năng từ các từ hiệu quả. Theo cách khác, word2vec được sử dụng để so khớp ngữ nghĩa (các mục liên quan chặt chẽ với nhau) và cú pháp (trình tự). Sử dụng word2vec, người ta có thể tìm thấy các từ tương tự, các từ khác nhau, giảm chiều và nhiều từ khác. Một tính năng quan trọng khác của word2vec là chuyển đổi biểu diễn chiều cao hơn của văn bản thành chiều thấp hơn của vectơ.
Sử dụng NLTK và Word2vec ở đâu?
Nếu một người phải hoàn thành một số nhiệm vụ có mục đích chung như đã đề cập ở trên như mã hóa, gắn thẻ POS và phân tích cú pháp thì người đó phải sử dụng NLTK trong khi để dự đoán các từ theo một số ngữ cảnh, mô hình chủ đề hoặc tương tự tài liệu thì người ta phải sử dụng Word2vec.
Mối quan hệ của NLTK và Word2vec với sự trợ giúp của mã
NLTK và Word2vec có thể được sử dụng cùng nhau để tìm cách biểu diễn các từ tương tự hoặc đối sánh cú pháp. Bộ công cụ NLTK có thể được sử dụng để tải nhiều gói đi kèm với NLTK và có thể tạo mô hình bằng word2vec. Sau đó, nó có thể được kiểm tra trên các từ thời gian thực. Hãy để chúng tôi xem sự kết hợp của cả hai trong đoạn mã sau. Trước khi xử lý thêm, vui lòng xem qua kho tài liệu mà NLTK cung cấp. Bạn có thể tải xuống bằng lệnh
nltk(nltk.download('all'))
Hình Corpora được tải xuống bằng NLTK
Vui lòng xem ảnh chụp màn hình để biết mã.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
Đầu ra:
[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]
Giải thích mã
- thư viện nltk được nhập từ nơi bạn có thể tải xuống kho ngữ liệu abc mà chúng tôi sẽ sử dụng trong bước tiếp theo.
- Gensim được nhập khẩu. Nếu Gensim chưa được cài đặt, vui lòng cài đặt bằng lệnh "pip3 install gensim". Vui lòng xem ảnh chụp màn hình bên dưới.
Hình Cài đặt Gensim bằng PIP
- nhập abc kho ngữ liệu đã được tải xuống bằng nltk.download ('abc').
- Chuyển các tệp đến mô hình word2vec được nhập bằng Gensim dưới dạng câu.
- Từ vựng được lưu trữ dưới dạng biến số.
- Mô hình được thử nghiệm trên khoa học từ mẫu vì các tệp này có liên quan đến khoa học.
- Ở đây, từ tương tự của "khoa học" được dự đoán bởi mô hình.
Trình kích hoạt và Word2Vec
Chức năng kích hoạt của nơ-ron xác định đầu ra của nơ-ron đó với một tập hợp các đầu vào. Lấy cảm hứng sinh học từ một hoạt động trong não của chúng ta, nơi các tế bào thần kinh khác nhau được kích hoạt bằng cách sử dụng các kích thích khác nhau. Hãy để chúng tôi hiểu chức năng kích hoạt thông qua sơ đồ sau.
Hình Hiểu về chức năng Kích hoạt
Ở đây x1, x2,… x4 là nút của mạng nơ-ron.
w1, w2, w3 là trọng lượng của nút,
∑ là tổng của tất cả trọng lượng và giá trị nút hoạt động như một hàm kích hoạt.
Tại sao lại kích hoạt chức năng?
Nếu không sử dụng hàm kích hoạt, đầu ra sẽ là tuyến tính nhưng chức năng của hàm tuyến tính bị hạn chế. Để đạt được các chức năng phức tạp như phát hiện đối tượng, phân loại hình ảnh, nhập văn bản bằng giọng nói và nhiều kết quả đầu ra phi tuyến tính khác là cần thiết bằng cách sử dụng chức năng kích hoạt.
Cách tính lớp kích hoạt trong nhúng từ (word2vec)
Softmax Layer (hàm mũ chuẩn hóa) là hàm lớp đầu ra kích hoạt hoặc kích hoạt mỗi nút. Một cách tiếp cận khác được sử dụng là softmax phân cấp trong đó độ phức tạp được tính bằng O (log 2 V) trong đó softmax nó là O (V) trong đó V là kích thước từ vựng. Sự khác biệt giữa chúng là giảm độ phức tạp trong lớp softmax phân cấp. Để hiểu chức năng (Hierarchical softmax) của nó, vui lòng xem ví dụ dưới đây:
Hình Cấu trúc cây softmax phân cấp như cấu trúc
Giả sử chúng ta muốn tính xác suất quan sát từ tình yêu trong một ngữ cảnh nhất định. Luồng từ gốc đến nút lá sẽ là lần di chuyển đầu tiên đến nút 2 và sau đó đến nút 5. Vì vậy, nếu chúng ta đã có kích thước từ vựng là 8, chỉ cần ba phép tính. Vì vậy, nó cho phép phân rã, tính toán xác suất của một từ ( tình yêu ).
Có những tùy chọn nào khác ngoài Softmax phân cấp?
Nếu nói theo nghĩa chung cho các tùy chọn nhúng từ có sẵn là Softmax phân biệt, CNN-Softmax, Lấy mẫu tầm quan trọng, Lấy mẫu tầm quan trọng thích ứng, Ước tính nhiễu, Lấy mẫu phủ định, Tự chuẩn hóa và Chuẩn hóa không thường xuyên.
Nói cụ thể về Word2vec, chúng tôi có sẵn mẫu phủ định.
Lấy mẫu phủ định là một cách để lấy mẫu dữ liệu đào tạo. Nó hơi giống với sự giảm dần độ dốc ngẫu nhiên, nhưng có một số khác biệt. Lấy mẫu phủ định chỉ tìm kiếm các ví dụ đào tạo tiêu cực. Nó dựa trên ước tính tương phản tiếng ồn và lấy mẫu các từ một cách ngẫu nhiên, không theo ngữ cảnh. Đó là một phương pháp đào tạo nhanh và chọn bối cảnh một cách ngẫu nhiên. Nếu từ dự đoán xuất hiện trong ngữ cảnh được chọn ngẫu nhiên thì cả hai vectơ đều gần nhau.
Có thể rút ra kết luận gì?
Các chất kích hoạt đang kích hoạt các tế bào thần kinh giống như các tế bào thần kinh của chúng ta được kích hoạt bằng cách sử dụng các kích thích bên ngoài. Lớp Softmax là một trong những chức năng của lớp đầu ra có chức năng kích hoạt các nơ-ron trong trường hợp nhúng từ. Trong word2vec, chúng ta có các tùy chọn như softmax phân cấp và lấy mẫu âm. Sử dụng bộ kích hoạt, người ta có thể chuyển đổi hàm tuyến tính thành hàm phi tuyến và một thuật toán học máy phức tạp có thể được thực hiện bằng cách sử dụng như vậy.
Gensim là gì?
Gensim là một bộ công cụ mô hình hóa chủ đề được triển khai bằng python. Mô hình hóa chủ đề là khám phá cấu trúc ẩn trong nội dung văn bản. Word2vec được nhập từ bộ công cụ Gensim. Xin lưu ý rằng Gensim không chỉ cung cấp triển khai word2vec mà còn Doc2vec và FastText nhưng hướng dẫn này là tất cả về word2vec nên chúng tôi sẽ bám sát chủ đề hiện tại.
Triển khai word2vec bằng Gensim
Cho đến bây giờ chúng ta đã thảo luận về word2vec là gì, các kiến trúc khác nhau của nó, tại sao có sự chuyển đổi từ một túi từ sang word2vec, mối quan hệ giữa word2vec và NLTK với mã trực tiếp và các chức năng kích hoạt. Trong phần này, sẽ triển khai word2vec bằng Gensim
Bước 1) Thu thập dữ liệu
Bước đầu tiên để triển khai bất kỳ mô hình học máy nào hoặc thực hiện xử lý ngôn ngữ tự nhiên là thu thập dữ liệu
Vui lòng quan sát dữ liệu để xây dựng một chatbot thông minh.
[{"tag": "welcome","patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]},{"tag": "goodbye","patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]},{"tag": "thankful","patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]},{"tag": "hoursopening","patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]},{"tag": "payments","patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]}]
Đây là những gì chúng tôi hiểu được từ dữ liệu
- Dữ liệu này chứa ba thứ thẻ, mẫu và phản hồi. Thẻ là mục đích (chủ đề thảo luận là gì).
- Dữ liệu ở định dạng JSON.
- Một mẫu là một câu hỏi mà người dùng sẽ hỏi bot
- Câu trả lời là câu trả lời mà chatbot sẽ cung cấp cho câu hỏi / mẫu tương ứng.
Bước 2) Xử lý trước dữ liệu.
Việc xử lý dữ liệu thô là rất quan trọng. Nếu dữ liệu đã làm sạch được cung cấp cho máy, thì mô hình sẽ phản hồi chính xác hơn và sẽ học dữ liệu hiệu quả hơn.
Bước này bao gồm việc loại bỏ các từ dừng, từ gốc, các từ không cần thiết, v.v. Trước khi tiếp tục, điều quan trọng là phải tải dữ liệu và chuyển đổi nó thành khung dữ liệu. Vui lòng xem mã dưới đây để biết
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Giải thích về MÃ.
- Vì dữ liệu ở dạng định dạng json do đó json được nhập
- Tệp được lưu trữ trong biến
- Tệp được mở và tải trong biến dữ liệu
Bây giờ dữ liệu được nhập và đã đến lúc chuyển dữ liệu thành khung dữ liệu. Vui lòng xem đoạn mã dưới đây để xem bước tiếp theo
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Giải thích về CODE
1. Dữ liệu được chuyển đổi thành khung dữ liệu bằng cách sử dụng gấu trúc đã được nhập ở trên.
2. Nó sẽ chuyển đổi danh sách trong các mẫu cột thành chuỗi.
from nltk.corpus import stopwordsfrom textblob import Wordstop = stopwords.words('english')df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Giải thích mã
1. Các từ dừng tiếng Anh được nhập bằng mô-đun từ dừng từ bộ công cụ nltk
2. Tất cả các từ của văn bản được chuyển đổi thành chữ thường bằng cách sử dụng hàm condition và lambda. Hàm lambda là một hàm ẩn danh.
3. Tất cả các hàng của văn bản trong khung dữ liệu được kiểm tra xem có dấu chấm câu trong chuỗi hay không và chúng được lọc.
4. Các ký tự như số hoặc dấu chấm bị xóa bằng biểu thức chính quy.
5. Chữ số bị xóa khỏi văn bản.
6. Các từ dừng được loại bỏ ở giai đoạn này.
7. Các từ được lọc ngay bây giờ và dạng khác của cùng một từ sẽ bị loại bỏ bằng cách sử dụng phương pháp bổ ngữ. Với những thứ này, chúng ta đã hoàn thành việc xử lý trước dữ liệu.
Đầu ra:
, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments
Bước 3) Xây dựng mạng thần kinh bằng word2vec
Bây giờ đã đến lúc xây dựng một mô hình bằng cách sử dụng Gensim module word2vec. Chúng tôi phải nhập word2vec từ Gensim. Hãy để chúng tôi làm điều này, sau đó chúng tôi sẽ xây dựng và trong giai đoạn cuối cùng, chúng tôi sẽ kiểm tra mô hình trên dữ liệu thời gian thực.
from gensim.models import Word2Vec
Bây giờ, chúng ta có thể xây dựng thành công mô hình bằng Word2Vec. Vui lòng tham khảo dòng mã tiếp theo để tìm hiểu cách tạo mô hình bằng Word2Vec. Văn bản được cung cấp cho mô hình dưới dạng danh sách vì vậy chúng tôi sẽ chuyển đổi văn bản từ khung dữ liệu sang danh sách bằng cách sử dụng đoạn mã dưới đây
Bigger_list=[]for i in df['patterns']li = list(i.split(""))Bigger_list.append(li)Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)
Giải thích về mã
1. Đã tạo danh sách lớn hơn trong đó danh sách bên trong được nối vào. Đây là định dạng được cung cấp cho mẫu Word2Vec.
2. Vòng lặp được thực hiện và mỗi mục nhập của cột mẫu của khung dữ liệu được lặp lại.
3. Mỗi phần tử của các mẫu cột được tách ra và lưu trữ trong danh sách bên trong li
4. Danh sách bên trong được nối với danh sách bên ngoài.
5. Danh sách này được cung cấp cho mô hình Word2Vec. Hãy cho chúng tôi hiểu một số thông số được cung cấp tại đây
Min_count: Nó sẽ bỏ qua tất cả các từ có tổng tần suất thấp hơn mức này.
Kích thước: Nó cho biết kích thước của các vectơ từ.
Công nhân: Đây là các chủ đề để đào tạo mô hình
Ngoài ra còn có các tùy chọn khác và một số tùy chọn quan trọng được giải thích bên dưới
Cửa sổ: Khoảng cách tối đa giữa từ hiện tại và từ dự đoán trong một câu.
Sg: Nó là một thuật toán đào tạo và 1 cho bỏ qua gam và 0 cho một túi từ liên tục. Chúng tôi đã thảo luận chi tiết về những điều này ở trên.
Hs: Nếu đây là 1 thì chúng ta đang sử dụng softmax phân cấp để huấn luyện và nếu 0 thì lấy mẫu âm.
Alpha: Tỷ lệ học ban đầu
Hãy để chúng tôi hiển thị mã cuối cùng bên dưới
#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)
Bước 4) Lưu mô hình
Mô hình có thể được lưu ở dạng thùng và dạng mô hình. Bin là định dạng nhị phân. Vui lòng xem các dòng dưới đây để lưu mô hình
model.save("word2vec.model")model.save("model.bin")
Giải thích về đoạn mã trên
1. Mô hình được lưu dưới dạng tệp .model.
2. mô hình được lưu dưới dạng tệp .bin
Chúng tôi sẽ sử dụng mô hình này để kiểm tra thời gian thực như Các từ tương tự, các từ khác nhau và các từ phổ biến nhất.
Bước 5) Đang tải mô hình và thực hiện kiểm tra thời gian thực
Mô hình được tải bằng cách sử dụng mã bên dưới
model = Word2Vec.load('model.bin')
Nếu bạn muốn in các từ vựng từ nó được thực hiện bằng cách sử dụng lệnh dưới đây
Mời bạn xem kết quả
['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']
Bước 6) Kiểm tra các từ tương tự nhất
Hãy để chúng tôi thực hiện những điều này một cách thiết thực
similar_words = model.most_similar('thanks')print(similar_words)
Mời bạn xem kết quả
[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]
Bước 7) Không khớp từ với các từ được cung cấp
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Chúng tôi đã cung cấp dòng chữ 'Hẹn gặp lại, cảm ơn đã ghé thăm'. Điều này sẽ in ra những từ khác biệt nhất với những từ này. Hãy để chúng tôi chạy mã này và tìm kết quả
Kết quả sau khi thực hiện đoạn mã trên.
Thanks
Bước 8) Tìm sự giống nhau giữa hai từ
Điều này sẽ cho biết kết quả về xác suất giống nhau giữa hai từ. Vui lòng xem đoạn mã dưới đây để thực hiện phần này.
similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)
Kết quả của đoạn mã trên như bên dưới
0,13706
Bạn có thể tìm thêm các từ tương tự bằng cách thực thi đoạn mã dưới đây
similar = model.similar_by_word('kind')print(similar)
Đầu ra của mã trên
[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]
Phần kết luận
- Nhúng từ là một kiểu biểu diễn từ cho phép các từ có nghĩa tương tự được các thuật toán học máy hiểu được
- Nhúng từ được sử dụng để tính toán các từ tương tự, Tạo một nhóm các từ liên quan, Tính năng phân loại văn bản, Phân cụm tài liệu, Xử lý ngôn ngữ tự nhiên
- Word2vec là một mô hình mạng nơ ron hai lớp nông để tạo ra tính năng nhúng từ để biểu diễn từ tốt hơn
- Word2vec biểu diễn các từ trong biểu diễn không gian vectơ. Các từ được biểu diễn dưới dạng vectơ và vị trí được thực hiện theo cách mà các từ có nghĩa tương tự xuất hiện cùng nhau và các từ khác nhau nằm ở xa
- Word2vec đã sử dụng 2 kiến trúc Túi từ liên tục (CBOW) và bỏ qua gam
- CBOW nhanh hơn nhiều lần so với bỏ qua gam và cung cấp tần suất tốt hơn cho các từ thường xuyên trong khi bỏ qua gam cần một lượng nhỏ dữ liệu đào tạo và thể hiện ngay cả những từ hoặc cụm từ hiếm.
- NLTK và word2vec có thể được sử dụng cùng nhau để tạo ra các ứng dụng mạnh mẽ
- Chức năng kích hoạt của nơ-ron xác định đầu ra của nơ-ron đó với một tập hợp các đầu vào. Trong word2vec. Softmax Layer (hàm mũ chuẩn hóa) là hàm lớp đầu ra kích hoạt hoặc kích hoạt mỗi nút. Word2vec cũng có sẵn mẫu phủ định
- Gensim là một bộ công cụ mô hình hóa chủ đề được triển khai bằng python