Mô hình nhúng Word và Word2Vec với ví dụ
Nhúng từ là gì?
Từ nhúng là một kiểu biểu diễn từ cho phép các thuật toán học máy hiểu các từ có nghĩa tương tự. Đây là một kỹ thuật mô hình hóa ngôn ngữ và học đặc trưng để ánh xạ các từ thành vectơ số thực bằng cách sử dụng mạng thần kinh, mô hình xác suất hoặc giảm kích thước trên ma trận xuất hiện của từ. Một số mô hình nhúng từ là Word2vec (Google), Glove (Stanford) và nhanh nhất (Facebook).
Nhúng từ 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ơ 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 sẽ 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ư các loại trái cây như táo, xoài, chuối nên đặt gần nhau, trong khi sách sẽ cách xa những dòng chữ này. Theo nghĩa rộng hơn, việc nhúng từ sẽ tạo ra vectơ hoa quả sẽ được đặt cách xa cách biểu thị vectơ của sách.
Tính năng nhúng từ được sử dụng ở đâu?
Nhúng từ giúp 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 các từ tương tự: Việc nhúng từ được sử dụng để gợi ý các từ tương tự với từ đang được đưa vào mô hình dự đoán. Cùng với đó nó còn gợi ý những từ khác 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 những thứ có đặc điểm tương tự lại với nhau và không giống nhau ở xa.
- 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 để huấn luyện cũng như dự đoán. Các mô hình phân loại dựa trên văn bản không thể được huấn luyện trên chuỗi, do đó, thao tác này sẽ chuyển văn bản thành dạng có thể huấn luyện bằng máy. Hơn nữa, các tính năng của nó là 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 đó Word Embedding Word2vec được sử dụng rộng rãi
- Xử lý ngôn ngữ tự nhiên: Có nhiều ứng dụng trong đó việc 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 đặc điểm, chẳng hạn như các phần gắn thẻ lời 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 đưa ra trên các mô hình khác nhau để triển khai việc nhúng từ. Toàn bộ hướng dẫn Nhúng Word này tập trung vào một trong các mô hình (Word2vec).
Word2vec là gì?
Word2vec là một kỹ thuật/mô hình để tạo ra cách nhúng từ nhằm thể hiện từ tốt hơn. Đó là một phương pháp xử lý ngôn ngữ tự nhiê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. Đó là một mạng lưới thần kinh hai lớp nông, có thể phát hiện các từ đồng nghĩa và gợi ý các từ bổ sung cho các câu một phần sau khi được huấn luyện.
Trước khi đi sâu hơn trong hướng dẫn Word2vec này, vui lòng xem sự khác biệt giữa mạng thần kinh nông và sâu như trong sơ đồ ví dụ nhúng Word bên dưới:
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 phụ thuộc vào các nút trong khi lớp ẩn cũng như lớp đầu ra đều chứa các nơ-ron.
Word2vec là mạng hai lớp trong đó có một lớp ẩn và một lớp đầ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.
Tại sao lại là Word2vec?
Word2vec đại diện cho các từ trong biểu diễn không gian vector. Các từ được biểu diễn dưới dạng vectơ và vị trí được thực hiện sao cho 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 nhau. Điều này cũng được gọi là một mối quan hệ ngữ nghĩa. Mạng lưới thần kinh không hiểu văn bản thay vào đó chúng chỉ hiểu những con số. Nhúng từ cung cấp một cách để chuyển đổi văn bản thành vectơ số.
Word2vec tái tạo lại bối cảnh ngôn ngữ của các từ. Trước khi đi sâu hơn, chúng ta hãy hiểu, bối cảnh ngôn ngữ là gì? Trong hoàn cảnh cuộc sống nói chung, khi chúng ta nói hoặc viết để giao tiếp, những người khác cố gắng tìm ra mục tiêu của câu là gì. Ví dụ: “Nhiệt độ của Ấn Độ là bao nhiêu”, ở đâ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 ngữ cảnh.
Word2vec làm gì?
Trước khi nhúng từ
Đ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 yếu của nó là gì, sau đó chúng ta sẽ chuyển sang chủ đề về cách khắc phục điểm yếu bằng cách nhúng Word bằng cách sử dụng phương pháp Word2vec. Cuối cùng, chúng ta sẽ chuyển sang cách Word2vec hoạt động vì điều quan trọng là phải hiểu cách hoạt động của nó.
Phương pháp 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 vectơ được mã hóa. Nó là một biểu diễn vector 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 thì nó được tính, nếu không thì không. Để hiểu rõ hơn mời các bạn xem chương trình bên dưới.
Ví dụ về Word2vec
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."] vocabulary = vectorizer.fit(data_corpus) X = vectorizer.transform(data_corpus) print(X.toarray()) print(vectorizer.get_feature_names_out())
Đầ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 khớp các từ trong đó. Cái này được nhập từ sklearn.
- Tạo đối tượng bằ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ừ để đếm số từ trong dữ liệu bằ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 0.
- Biến ở dòng 5 là x được chuyển đổi thành một mảng (phương thức có sẵn cho x). Điều này sẽ cung cấp số lượng từng mã thông báo trong câu hoặc danh sách được cung cấp ở 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 ở 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ố lần từ đó xuất hiện trong tài liệu. Nó là sự biểu diễn các từ dưới dạng ma trận tài liệu. Tần số tài liệu nghịch đảo tần số thuật ngữ (TFIDF) được sử dụng để đếm tần số của các từ trong tài liệu là tần số của thuật ngữ trong tài liệu/tần số của thuật ngữ trong toàn bộ kho văn bản.
Nhược điểm của phương pháp Bag of Words
- Nó bỏ qua thứ tự của từ, ví dụ, this is bad = bad is this.
- 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 được tìm thấy tốt nhất 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 được tìm thấy tốt nhất trong sách”. Nó sẽ coi cả hai đều 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, việc nhúng từ đã được phát triển và Word2vec là một cách tiếp cận để thực hiện điều đó.
Word2vec hoạt động như thế nào?
Word2vec học từ bằng cách dự đoán ngữ cảnh xung quanh 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ừ: love.
Giả sử
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
Từ yêu di chuyển qua từng từ trong kho văn bản. 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 ra những từ tương tự và tương tự.
Tất cả các tính năng ngẫu nhiên của từ yê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ừ lân cận hoặc ngữ cảnh với sự trợ giúp của một Lan truyền ngược phương pháp.
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 điểm giống nhau thì những từ đó có liên quan với nhau.
Word2vec Archikiến trúc
Word2vec sử dụng hai kiến trúc:
- Túi từ liên tục (CBOW)
- Bỏ qua gam
Trước khi đi sâu hơn vào hướng dẫn Word2vec này, chúng ta hãy thảo luận về lý do tại sao các 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ừ. Học biểu diễn từ về cơ bản là không giám sát, nhưng cần có mục tiêu/nhãn để đào tạo mô hình. Skip-gram và CBOW chuyển đổi biểu diễn không 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 wi-1,wi-2,wi + 1,wi + 2được cung cấp các từ hoặc ngữ cảnh, mô hình này sẽ cung cấpi
Skip-Gram hoạt động ngược lại 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 wi được đưa ra, điều này sẽ dự đoán bối cảnh hoặc wi-1,wi-2,wi + 1,wtôi+2.
Word2vec cung cấp tùy chọn để lựa chọn giữa CBOW (Túi từ liên tục) và skim-gram. Các tham số như vậ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 mẫu âm hoặc lớp softmax phân cấp.
Túi từ liên tục
Chúng ta hãy vẽ một sơ đồ ví dụ Word2vec đơn giản để hiểu được cấu trúc liên tục của từ.
Hãy để chúng tôi tính toán các phương trình 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 định nghĩa là { xi-1, xi-2, xtôi+1, xi + 2}. Chúng 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 bằng phương trình sau.
h=xitW
xi ở đâut? W lần lượt là vectơ đầu vào và ma trận trọng số,
Để tính độ khớ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ô hình thu được dự đoán?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 cho một từ đầu vào. Để hiểu rõ hơn chúng ta hãy vẽ sơ đồ như trong ví dụ Word2vec bên dưới.
Người ta có thể coi nó như là mặt trái của mô hình từ 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 tôi cũng có thể kết luận rằng mục tiêu được đưa vào lớp đầu vào và lớp đầ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 gram và cung cấp tần suất tốt hơn cho các từ thường gặp trong khi bỏ qua gram cần một lượng nhỏ dữ liệu huấn luyện và đại diện cho 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 như các phần gắn thẻ lời nói, từ vựng, từ gốc, dừng loại bỏ từ, 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 đặc điểm của các từ hiệu quả. Nói cách khác, Word2vec được sử dụng để khớp ngữ nghĩa (các mục có liên quan chặt chẽ với nhau) và khớp 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 kích thước và nhiều từ khác. Một tính năng quan trọng khác của Word2vec là chuyển đổi cách biểu diễn văn bản theo chiều cao hơn thành dạng vectơ có chiều thấp hơn.
Sử dụng NLTK và Word2vec ở đâu?
Nếu người ta phải hoàn thành một số nhiệm vụ có mục đích chung như đã đề cập ở trên như mã thông báo, gắn thẻ POS và phân tích cú pháp thì người ta 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ự của tài liệu, 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ác từ tương tự biểu diễn hoặc khớp 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à mô hình có thể được tạo bằng Word2vec. Sau đó, nó có thể được thử nghiệm trên các từ thời gian thực. Chúng ta hãy xem sự kết hợp của cả hai trong mã sau. Trước khi xử lý thêm, vui lòng xem qua các tập hợp dữ liệu mà NLTK cung cấp. Bạn có thể tải xuống bằng lệnh
nltk(nltk.download('all'))
Vui lòng xem ảnh chụp màn hình để biết mã.
import nltk import gensim from nltk.corpus import abc model= 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ừ đó bạn có thể tải xuống kho dữ 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 Word2vec chưa được cài đặt, vui lòng cài đặt nó bằng lệnh ” pip3 install gensim”. Vui lòng xem ảnh chụp màn hình bên dưới.
- nhập kho văn bản abc đã được tải xuống bằng nltk.download('abc').
- Chuyển các tệp vào 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.
- Mô hình được kiểm tra trên mẫu từ khoa học vì những tệp này có liên quan đến khoa học.
- Ở đây, từ “khoa học” tương tự được dự đoán bởi mô hình.
Trình kích hoạt và Word2Vec
Hàm kích hoạt của neuron xác định đầu ra của neuron đó khi có một tập hợp các đầu vào. Lấy cảm hứng từ hoạt động trong não bộ của chúng ta, các neuron khác nhau được kích hoạt bằng các kích thích khác nhau. Hãy cùng tìm hiểu hàm kích hoạt thông qua sơ đồ sau.
Ở đây x1,x2,..x4 là nút của mạng nơ-ron.
w1, w2, w3 là trọng số của nút,
? là tổng của tất cả giá trị trọng số và nút hoạt động như hàm kích hoạt.
Tại sao 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 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 đầu ra phi tuyến tính khác là cần thiết, điều này đạt được bằng cách sử dụng hàm kích hoạt.
Cách tính toán lớp kích hoạt trong nhúng từ (Word2vec)
Lớp Softmax (hàm mũ chuẩn hóa) là hàm lớp đầu ra kích hoạt hoặc kích hoạt từng 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(log2V) trong đó softmax là O(V) trong đó V là kích thước từ vựng. Sự khác biệt giữa chúng là sự giảm độ phức tạp trong lớp softmax phân cấp. Để hiểu chức năng (softmax phân cấp) của nó, vui lòng xem ví dụ nhúng Word bên dưới:
Giả sử chúng ta muốn tính xác suất quan sát được từ yêu đưa ra một bối cảnh nhất định. Luồng từ nút gốc đến nút lá sẽ là bước di chuyển đầu tiên đến nút 2 rồi đến nút 5. Vì vậy, nếu chúng ta có kích thước từ vựng là 8 thì chỉ cần ba phép tính. Vì vậy nó cho phép phân tách, tính toán xác suất của một từ (yêu).
Ngoài Hierarchical Softmax còn có những lựa chọn nào khác?
Nếu nói theo nghĩa chung thì các tùy chọn nhúng từ có sẵn là Softmax khác biệt, CNN-Softmax, Lấy mẫu quan trọng, Lấy mẫu tầm quan trọng thích ứng, Ước tính tương phản tiếng ồn, Lấy mẫu âm, 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 âm tính.
Lấy mẫu âm là một cách để lấy mẫu dữ liệu huấn luyện. Nó hơi giống với việc giảm độ 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 phủ định. Nó dựa trên ước tính tương phản tiếng ồn và lấy mẫu ngẫu nhiên các từ, không phải trong 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ừ được 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 bộ 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ác kích thích bên ngoài. Lớp Softmax là một trong những hàm lớp đầu ra kích hoạt các tế bào thần kinh 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 các 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 tính và có thể triển khai thuật toán học máy phức tạp bằng cách sử dụng như vậy.
Gensim là gì?
gensim là một bộ công cụ xử lý ngôn ngữ tự nhiên và mô hình hóa chủ đề nguồn mở được triển khai trong Python và Cython. Bộ công cụ Gensim cho phép người dùng nhập Word2vec để lập mô hình chủ đề để khám phá cấu trúc ẩn trong nội dung văn bản. Gensim không chỉ cung cấp khả năng triển khai Word2vec mà còn cho Doc2vec và FastText.
Hướng dẫn này hoàn toàn là về Word2vec nên chúng ta sẽ bám sát chủ đề hiện tại.
Cách triển khai Word2vec bằng Gensim
Cho đến nay chúng ta đã thảo luận về Word2vec là gì, các kiến trúc khác nhau của nó, lý do tại sao lại 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 hàm kích hoạt.
Dưới đây là phương pháp từng bước để 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 triển khai 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 như trong ví dụ Gensim Word2vec bên dưới.
[{"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ẫu là câu hỏi mà người dùng sẽ hỏi bot
- Phản hồ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) Tiền xử lý dữ liệu
Việc xử lý dữ liệu thô là rất quan trọng. Nếu dữ liệu đã được làm sạch được đưa vào máy thì mô hình sẽ phản hồi chính xác hơn và sẽ tìm hiểu dữ liệu hiệu quả hơn.
Bước này liên quan đến 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 cho như vậy
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Giải thích mã:
- Vì dữ liệu ở dạng định dạng json nên json được nhập
- Tệp được lưu trữ trong biến
- Tệp đang mở và được tải trong biến dữ liệu
Bây giờ dữ liệu đã được nhập và đã đến lúc chuyển đổi dữ liệu thành khung dữ liệu. Vui lòng xem mã bên dưới để xem bước tiếp theo
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Giải thích mã:
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 theo mẫu cột thành chuỗi.
from nltk.corpus import stopwords from textblob import Word stop = 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ừ trong văn bản được chuyển đổi thành chữ thường bằng cách sử dụng hàm điều kiện và hàm lambda. Hàm Lambda là một chức năng ẩn danh.
3. Tất cả các hàng văn bản trong khung dữ liệu đều được kiểm tra dấu câu trong chuỗi và chúng được lọc.
4. Các ký tự như số hoặc dấu chấm sẽ bị xóa bằng biểu thức chính quy.
5. Digits 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ừ bây giờ được lọc và dạng khác của cùng một từ sẽ bị loại bỏ bằng cách sử dụng từ vựng. Như vậy là chúng ta đã hoàn tất quá trình tiền xử lý dữ liệu.
Đầu ra:
, patterns, responses, tag 0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome 1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye 2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful 3,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']",hoursopening 4,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 lưới thần kinh bằng Word2vec
Bây giờ là lúc xây dựng mô hình bằng mô-đun Gensim 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ờ trong hướng dẫn Gensim Word2vec này, 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 nên chúng tôi sẽ chuyển đổi văn bản từ khung dữ liệu sang danh sách bằng mã bên dưới
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 mã:
1. Tạo danh sách lớn hơn để thêm danh sách bên trong. Đây là định dạng được cung cấp cho mô hình Word2Vec.
2. Vòng lặp được triển khai 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 mẫu cột được phân chia 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 để chúng tôi hiểu một số thông số được cung cấp ở đây
Số lượng tối thiểu: Nó sẽ bỏ qua tất cả các từ có tổng tần số thấp hơn mức này.
Kích thước: Nó cho biết tính chiều 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ừ được dự đoán trong một câu.
Thượng sĩ: Đây là thuật toán đào tạo và 1 cho skip-gram 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 là 1 thì chúng ta đang sử dụng softmax phân cấp để đào tạo và nếu là 0 thì sử dụng mẫu âm.
Alpha: Tỷ lệ học tập ban đầu
Hãy để chúng tôi hiển thị mã cuối cùng dưới đây:
#list of libraries used by the code import string from gensim.models import Word2Vec import logging from nltk.corpus import stopwords from textblob import Word import json import pandas as pd #data in json format json_file = 'intents.json' with open('intents.json','r') as f: data = json.load(f) #displaying the list of stopwords stop = stopwords.words('english') #dataframe df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join) # print(df['patterns']) #print(df['patterns']) #cleaning the data using the NLP approach print(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 list bigger_list=[] for i in df['patterns']: li = list(i.split(" ")) bigger_list.append(li) #structure of data to be taken by the model.word2vec print("Data format for the overall list:",bigger_list) #custom data is fed to machine for further processing model = 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ưới 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 đ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 file .bin
Chúng tôi sẽ sử dụng mô hình này để thực hiện kiểm tra theo thời gian thực, chẳng hạn 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) 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 mã bên dưới:
model = Word2Vec.load('model.bin')
Nếu bạn muốn in từ vựng từ nó, hãy thực hiện bằng lệnh bên dưới:
vocab = list(model.wv.vocab)
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ừ giống nhau nhất
Hãy để chúng tôi thực hiện những điều thực tế:
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 các từ 'Hẹn gặp lại sau, cảm ơn bạn đã ghé thăm'. Điều này sẽ in những từ khác nhau nhất từ 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 thi đoạn code trên:
Thanks
Bước 8) Tìm sự giống nhau giữa hai từ
Điều này sẽ cho 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 cách 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ư sau
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)]
Kết luận
- Nhúng từ là một kiểu biểu diễn từ cho phép các thuật toán học máy hiểu được các từ có nghĩa tương tự
- Word Embedding dùng để tính toán các từ giống nhau, Tạo nhóm 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 giải thích: Word2vec là một mô hình mạng thần kinh hai lớp nông để tạo ra các từ nhúng để thể hiện từ tốt hơn
- Word2vec đại diện cho các từ trong biểu diễn không gian vector. Các từ được biểu diễn dưới dạng vectơ và vị trí được thực hiện 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
- Thuật toán Word2vec sử dụng 2 kiến trúc Túi từ liên tục (CBOW) và bỏ qua gram
- CBOW nhanh hơn nhiều lần so với bỏ qua gram và cung cấp tần suất tốt hơn cho các từ thường gặp trong khi bỏ qua gram cần một lượng nhỏ dữ liệu huấn luyện và đại diện cho 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ẽ
- Hàm 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. Lớp Softmax (hàm số mũ chuẩn hóa) là hàm lớp đầu ra kích hoạt hoặc kích hoạt từng nút. Word2vec cũng có sẵn mẫu âm tính
- Gensim là bộ công cụ mô hình hóa chủ đề được triển khai bằng python