Embedding

Natural Language Processing (NLP) bằng Python

Fouad Trad

Machine Learning Engineer

Hạn chế của BoW và TF-IDF

  • Xem các từ giống nhau là hoàn toàn không liên quan
  • Không nắm bắt được nghĩa của văn bản

 

Hình minh họa cách BoW/TF-IDF biến tập dữ liệu nhiều văn bản thành dữ liệu có cấu trúc, nơi các từ duy nhất là đặc trưng.

Natural Language Processing (NLP) bằng Python

Embedding

Hình cho thấy embedding biến một từ thành vector.

  • Biểu diễn từ bằng vector nắm bắt nghĩa
Natural Language Processing (NLP) bằng Python

Embedding

Hình hiển thị vector embedding của bốn từ: car, movie, film, và king.

  • Biểu diễn từ bằng vector nắm bắt nghĩa
    • Ban đầu gán giá trị ngẫu nhiên cho mỗi từ
Natural Language Processing (NLP) bằng Python

Embedding

Hình minh họa bài toán hoàn thành câu, mục tiêu là điền đúng từ vào câu như "I enjoyed watching the".

  • Biểu diễn từ bằng vector nắm bắt nghĩa
    • Ban đầu gán giá trị ngẫu nhiên cho mỗi từ
    • Tinh chỉnh bằng cách dự đoán từ thiếu trong câu
Natural Language Processing (NLP) bằng Python

Embedding

Hình cho thấy có thể hoàn thành câu bằng hai từ đồng nghĩa: movie và film.

  • Biểu diễn từ bằng vector nắm bắt nghĩa
    • Ban đầu gán giá trị ngẫu nhiên cho mỗi từ
    • Tinh chỉnh bằng cách dự đoán từ thiếu trong câu
    • Từ xuất hiện trong ngữ cảnh tương tự sẽ có biểu diễn tương tự
Natural Language Processing (NLP) bằng Python

Embedding như tọa độ GPS cho từ

Hình hiển thị vị trí GPS trên bản đồ.

Natural Language Processing (NLP) bằng Python

Gensim

  • Cung cấp các mô hình embedding phổ biến
    • Word2Vec
    • GloVe
word2vec-ruscorpora-300
word2vec-google-news-300
glove-wiki-gigaword-50
glove-wiki-gigaword-100
glove-wiki-gigaword-200
glove-wiki-gigaword-300
...

 

  Logo Gensim.

Natural Language Processing (NLP) bằng Python

Tải mô hình embedding

import gensim.downloader as api

model = api.load('glove-wiki-gigaword-50')
print(type(model))
print(model['movie'])
<class 'gensim.models.keyedvectors.KeyedVectors'>

[ 0.30824 0.17223 -0.23339 0.023105 0.28522 0.23076 -0.41048 -1.0035 -0.2072 1.4327 -0.80684 0.68954 -0.43648 1.1069 1.6107 -0.31966 0.47744 0.79395 -0.84374 0.064509 0.90251 0.78609 0.29699 0.76057 0.433 -1.5032 -1.6423 0.30256 0.30771 -0.87057 2.4782 -0.025852 0.5013 -0.38593 -0.15633 0.45522 0.04901 -0.42599 -0.86402 -1.3076 -0.29576 1.209 -0.3127 -0.72462 -0.80801 0.082667 0.26738 -0.98177 -0.32147 0.99823 ]
Natural Language Processing (NLP) bằng Python

Tính độ tương đồng

similarity = model.similarity("film", "movie")

print(similarity)
0.9310100078582764
Natural Language Processing (NLP) bằng Python

Tìm các từ tương tự nhất

similar_to_movie = model.most_similar('movie', topn=3)

print(similar_to_movie)
[('movies', 0.9322481155395508), 
 ('film', 0.9310100078582764), 
 ('films', 0.8937394618988037)]
Natural Language Processing (NLP) bằng Python

Trực quan hóa embedding

  • Phân tích Thành phần Chính (PCA):
    • Vector nhiều chiều → vector 2D hoặc 3D

Bản đồ 3D được làm phẳng thành 2D.

1 Hình tạo bởi DALL-E
Natural Language Processing (NLP) bằng Python

Trực quan hóa embedding với PCA

from sklearn.decomposition import PCA

words = ["film", "movie", "dog", "cat", "car", "bus"]
word_vectors = [model[word] for word in words]
pca = PCA(n_components=2)
word_vectors_2d = pca.fit_transform(word_vectors)
plt.scatter(word_vectors_2d[:, 0], word_vectors_2d[:, 1])
for word, (x, y) in zip(words, word_vectors_2d): plt.annotate(word, (x, y))
plt.show()

Hình cho thấy các từ tương tự/liên quan gần nhau trong không gian embedding.

Natural Language Processing (NLP) bằng Python

So sánh embedding

Hình cho thấy các từ tương tự/liên quan trong mô hình Word2Vec gần nhau trong không gian embedding, nhưng vị trí khác mô hình GloVe.

word2vec-google-news-300

Hình cho thấy các từ tương tự/liên quan trong mô hình GloVe gần nhau trong không gian embedding.

glove-wiki-gigaword-50
Natural Language Processing (NLP) bằng Python

Luyện tập thôi!

Natural Language Processing (NLP) bằng Python

Preparing Video For Download...