Vektor kata dan kesamaan semantik

NLP Lanjutan dengan spaCy

Ines Montani

spaCy core developer

Membandingkan kemiripan semantik

  • spaCy dapat membandingkan dua objek dan memprediksi kemiripan
  • Doc.similarity(), Span.similarity(), dan Token.similarity()
  • Menerima objek lain dan mengembalikan skor kemiripan (0 hingga 1)
  • Penting: perlu model dengan word vectors, misalnya:
    • YA: en_core_web_md (model medium)
    • YA: en_core_web_lg (model large)
    • TIDAK: en_core_web_sm (model small)
NLP Lanjutan dengan spaCy

Contoh kemiripan (1)

# Muat model lebih besar dengan vektor
nlp = spacy.load('en_core_web_md')

# Bandingkan dua dokumen doc1 = nlp("I like fast food") doc2 = nlp("I like pizza") print(doc1.similarity(doc2))
0.8627204117787385
# Bandingkan dua token
doc = nlp("I like pizza and pasta")
token1 = doc[2]
token2 = doc[4]
print(token1.similarity(token2))
0.7369546
NLP Lanjutan dengan spaCy

Contoh kemiripan (2)

# Bandingkan dokumen dengan token
doc = nlp("I like pizza")
token = nlp("soap")[0]

print(doc.similarity(token))
0.32531983166759537
# Bandingkan span dengan dokumen
span = nlp("I like pizza and pasta")[2:5]
doc = nlp("McDonalds sells burgers")

print(span.similarity(doc))
0.619909235817623
NLP Lanjutan dengan spaCy

Bagaimana spaCy memprediksi kemiripan?

  • Kemiripan ditentukan dengan word vectors
  • Representasi makna kata berdimensi banyak
  • Dibuat dengan algoritme seperti Word2Vec dan banyak teks
  • Dapat ditambahkan ke model statistik spaCy
  • Bawaan: cosine similarity, tetapi bisa diubah
  • Vektor Doc dan Span bawaan = rata-rata vektor token
  • Frasa pendek lebih baik daripada dokumen panjang dengan banyak kata tidak relevan
NLP Lanjutan dengan spaCy

Vektor kata di spaCy

# Muat model lebih besar dengan vektor
nlp = spacy.load('en_core_web_md')

doc = nlp("I have a banana") # Akses vektor melalui atribut token.vector print(doc[3].vector)
 [2.02280000e-01,  -7.66180009e-02,   3.70319992e-01,
  3.28450017e-02,  -4.19569999e-01,   7.20689967e-02,
 -3.74760002e-01,   5.74599989e-02,  -1.24009997e-02,
  5.29489994e-01,  -5.23800015e-01,  -1.97710007e-01,
 -3.41470003e-01,   5.33169985e-01,  -2.53309999e-02,
  1.73800007e-01,   1.67720005e-01,   8.39839995e-01,
  5.51070012e-02,   1.05470002e-01,   3.78719985e-01,
  2.42750004e-01,   1.47449998e-02,   5.59509993e-01,
  1.25210002e-01,  -6.75960004e-01,   3.58420014e-01,
 -4.00279984e-02,   9.59490016e-02,  -5.06900012e-01,
 -8.53179991e-02,   1.79800004e-01,   3.38669986e-01,
  ...
NLP Lanjutan dengan spaCy

Kemiripan bergantung pada konteks aplikasi

  • Berguna untuk banyak aplikasi: rekomendasi, menandai duplikat, dll.
  • Tidak ada definisi "kemiripan" yang objektif
  • Bergantung pada konteks dan kebutuhan aplikasi
doc1 = nlp("I like cats")
doc2 = nlp("I hate cats")

print(doc1.similarity(doc2))
0.9501447503553421
NLP Lanjutan dengan spaCy

Ayo berlatih!

NLP Lanjutan dengan spaCy

Preparing Video For Download...