การวัดความคล้ายคลึงทางความหมายด้วย spaCy

การประมวลผลภาษาธรรมชาติด้วย spaCy

Azadeh Mobasher

Principal Data Scientist

วิธีวัดความคล้ายคลึงทางความหมาย

 

  • กระบวนการวิเคราะห์ข้อความเพื่อระบุความคล้ายคลึง
  • จัดข้อความเป็นหมวดหมู่ที่กำหนดไว้ หรือตรวจหาข้อความที่เกี่ยวข้อง
  • คะแนนความคล้ายคลึง วัดว่าข้อความสองชิ้นคล้ายกันมากแค่ไหน

 

What is the cheapest flight from Boston to Seattle?
Which airline serves Denver, Pittsburgh and Atlanta?
What kinds of planes are used by American Airlines?
การประมวลผลภาษาธรรมชาติด้วย spaCy

คะแนนความคล้ายคลึง

  • เมตริกที่นิยามบนข้อความ
  • ใช้ Cosine similarity และ word vectors ในการวัดความคล้ายคลึง
  • Cosine similarity มีค่าอยู่ระหว่าง 0 ถึง 1

Cosine similarity และเวกเตอร์

การประมวลผลภาษาธรรมชาติด้วย spaCy

Token similarity

  • spaCy คำนวณคะแนนความคล้ายคลึงระหว่างออบเจกต์ Token
nlp = spacy.load("en_core_web_md")
doc1 = nlp("We eat pizza")
doc2 = nlp("We like to eat pasta")

token1 = doc1[2] token2 = doc2[4] print(f"Similarity between {token1} and {token2} = ", round(token1.similarity(token2), 3))
>>> Similarity between pizza and pasta =  0.685
การประมวลผลภาษาธรรมชาติด้วย spaCy

Span similarity

  • spaCy คำนวณความคล้ายคลึงทางความหมายของออบเจกต์ Span สองตัว
doc1 = nlp("We eat pizza")
doc2 = nlp("We like to eat pasta")

span1 = doc1[1:]
span2 = doc2[1:]

print(f"Similarity between \"{span1}\" and \"{span2}\" = ", round(span1.similarity(span2), 3))
>>> Similarity between "eat pizza" and "like to eat pasta" =  0.588
print(f"Similarity between \"{doc1[1:]}\" and \"{doc2[3:]}\" = ",
        round(doc1[1:].similarity(doc2[3:]), 3))
>>> Similarity between "eat pizza" and "eat pasta" =  0.936
การประมวลผลภาษาธรรมชาติด้วย spaCy

Doc similarity

  • spaCy คำนวณคะแนนความคล้ายคลึงระหว่างเอกสารสองชิ้น
nlp = spacy.load("en_core_web_md")

doc1 = nlp("I like to play basketball")
doc2 = nlp("I love to play basketball")
print("Similarity score :", round(doc1.similarity(doc2), 3))
>>> Similarity score : 0.975
  • Cosine similarity สูงแสดงว่าเนื้อหามีความหมายคล้ายกันมาก
  • เวกเตอร์ของ Doc ใช้ค่าเฉลี่ยของ word vectors เป็นค่าเริ่มต้น
การประมวลผลภาษาธรรมชาติด้วย spaCy

Sentence similarity

  • spaCy ค้นหาเนื้อหาที่เกี่ยวข้องกับคีย์เวิร์ดที่กำหนด
  • ตัวอย่างการค้นหาคำถามจากลูกค้าที่คล้ายกับคำว่า price:
sentences = nlp("What is the cheapest flight from Boston to Seattle? 
                 Which airline serves Denver, Pittsburgh and Atlanta? 
                 What kinds of planes are used by American Airlines?")

keyword = nlp("price")

for i, sentence in enumerate(sentences.sents): print(f"Similarity score with sentence {i+1}: ", round(sentence.similarity(keyword), 5))
>>> Similarity score with sentence 1:  0.26136
Similarity score with sentence 2:  0.14021
Similarity score with sentence 3:  0.13885
การประมวลผลภาษาธรรมชาติด้วย spaCy

มาฝึกกันเถอะ!

การประมวลผลภาษาธรรมชาติด้วย spaCy

Preparing Video For Download...