Kelime vektörleri ve anlamsal benzerlik

spaCy ile İleri Düzey NLP

Ines Montani

spaCy core developer

Anlamsal benzerliği karşılaştırma

  • spaCy iki nesneyi karşılaştırıp benzerliği tahmin edebilir
  • Doc.similarity(), Span.similarity() ve Token.similarity()
  • Başka bir nesne alır ve bir benzerlik skoru döndürür (01)
  • Önemli: kelime vektörleri içeren bir modele ihtiyaç duyar, örneğin:
    • EVET: en_core_web_md (orta)
    • EVET: en_core_web_lg (büyük)
    • HAYIR: en_core_web_sm (küçük)
spaCy ile İleri Düzey NLP

Benzerlik örnekleri (1)

# Vektörleri olan daha büyük bir model yükleyin
nlp = spacy.load('en_core_web_md')

# İki dokümanı karşılaştırın doc1 = nlp("I like fast food") doc2 = nlp("I like pizza") print(doc1.similarity(doc2))
0.8627204117787385
# İki token'ı karşılaştırın
doc = nlp("I like pizza and pasta")
token1 = doc[2]
token2 = doc[4]
print(token1.similarity(token2))
0.7369546
spaCy ile İleri Düzey NLP

Benzerlik örnekleri (2)

# Bir dokümanı bir token ile karşılaştırın
doc = nlp("I like pizza")
token = nlp("soap")[0]

print(doc.similarity(token))
0.32531983166759537
# Bir span'i bir dokümanla karşılaştırın
span = nlp("I like pizza and pasta")[2:5]
doc = nlp("McDonalds sells burgers")

print(span.similarity(doc))
0.619909235817623
spaCy ile İleri Düzey NLP

spaCy benzerliği nasıl tahmin eder?

  • Benzerlik kelime vektörleri ile belirlenir
  • Sözcüklerin çok boyutlu anlam temsilleri
  • Word2Vec gibi bir algoritma ve çokça metinle üretilir
  • spaCy'nin istatistiksel modellerine eklenebilir
  • Varsayılan: kosinüs benzerliği; ayarlanabilir
  • Doc ve Span vektörleri varsayılan olarak token vektörlerinin ortalamasıdır
  • Kısa ifadeler, çok ilgisiz kelimeli uzun dokümanlardan daha iyidir
spaCy ile İleri Düzey NLP

spaCy'de kelime vektörleri

# Vektörleri olan daha büyük bir model yükleyin
nlp = spacy.load('en_core_web_md')

doc = nlp("I have a banana") # Vektöre token.vector özelliğiyle erişin 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,
  ...
spaCy ile İleri Düzey NLP

Benzerlik uygulama bağlamına bağlıdır

  • Birçok uygulama için yararlı: öneri sistemleri, kopya tespiti vb.
  • “Benzerlik” için nesnel bir tanım yoktur
  • Bağlama ve uygulamanın ihtiyacına bağlıdır
doc1 = nlp("I like cats")
doc2 = nlp("I hate cats")

print(doc1.similarity(doc2))
0.9501447503553421
spaCy ile İleri Düzey NLP

Hadi pratik yapalım!

spaCy ile İleri Düzey NLP

Preparing Video For Download...