สวัสดีทุกคน! เรากำลังเปิดชุดบทความที่เกี่ยวข้องกับการแก้ปัญหาในทางปฏิบัติที่เกี่ยวข้องกับการประมวลผลภาษาธรรมชาติ (การประมวลผลภาษาธรรมชาติหรือ NLP) และการสร้างตัวแทนการโต้ตอบ (แชทบอท) โดยใช้ไลบรารีโอเพ่นซอร์ส
งาน NLP รวมถึงการกำหนดความรู้สึกของข้อความ แยกวิเคราะห์เอนทิตีที่มีชื่อ การกำหนดสิ่งที่คู่สนทนาต้องการจากบอทของคุณ: สั่งพิซซ่าหรือรับข้อมูลเบื้องหลัง และอื่นๆ อีกมากมาย คุณสามารถอ่านเพิ่มเติมเกี่ยวกับงานและวิธีการ NLP
ในบทความนี้ เราจะแสดงวิธีเรียกใช้เซิร์ฟเวอร์ REST ด้วยโมเดล NLP ที่ผ่านการฝึกอบรมมาแล้ว และพร้อมใช้งานโดยไม่ต้องมีการกำหนดค่าหรือการฝึกอบรมเพิ่มเติม
การติดตั้ง DeepPavlov
คำแนะนำสำหรับ Linux จะได้รับที่นี่และด้านล่าง สำหรับ Windows โปรดดูของเรา
- สร้างและเปิดใช้งานสภาพแวดล้อมเสมือนจริงด้วย Python เวอร์ชันที่รองรับในปัจจุบัน:
virtualelnv env -p python3.7 source env/bin/activate
- ติดตั้ง DeepPavlov ในสภาพแวดล้อมเสมือนจริง:
pip install deeppavlov
การเปิดตัวเซิร์ฟเวอร์ REST ด้วยโมเดล DeepPavlov
ก่อนที่เราจะเปิดตัวเซิร์ฟเวอร์ด้วยโมเดล DeepPavlov เป็นครั้งแรก การพูดคุยเกี่ยวกับคุณสมบัติบางอย่างของสถาปัตยกรรมของไลบรารีจะมีประโยชน์
รุ่นใด ๆ ใน DP ประกอบด้วย:
- รหัสหลาม;
- ส่วนประกอบที่ดาวน์โหลดได้ - ผลการฝึกอบรมต่อเนื่องกับข้อมูลเฉพาะ (การฝัง น้ำหนักของโครงข่ายประสาทเทียม ฯลฯ)
- ไฟล์การกำหนดค่า (ต่อไปนี้จะเรียกว่าการกำหนดค่า) ซึ่งมีข้อมูลเกี่ยวกับคลาสที่ใช้โดยโมเดล, URL ของส่วนประกอบที่ดาวน์โหลด, การพึ่งพา Python เป็นต้น
เราจะบอกคุณเพิ่มเติมเกี่ยวกับสิ่งที่อยู่ภายใต้การดูแลของ DeepPavlov ในบทความต่อไปนี้ ตอนนี้ก็เพียงพอแล้วสำหรับเราที่จะรู้ว่า:
- โมเดลใดๆ ใน DeepPavlov จะถูกระบุด้วยชื่อของการกำหนดค่า
- หากต้องการรันโมเดล คุณต้องดาวน์โหลดส่วนประกอบจากเซิร์ฟเวอร์ DeepPavlov
- นอกจากนี้ ในการรันโมเดล คุณต้องติดตั้งไลบรารี Python ที่ใช้ด้วย
โมเดลแรกที่เราจะเปิดตัวคือ Named Entity Recognition (NER) หลายภาษา โมเดลจะจัดประเภทคำที่เป็นข้อความตามประเภทของเอนทิตีที่มีชื่อซึ่งคำเหล่านั้นอยู่ (ชื่อเฉพาะ ชื่อทางภูมิศาสตร์ ชื่อสกุลเงิน และอื่นๆ) ชื่อการกำหนดค่าสำหรับ NER เวอร์ชันล่าสุดปัจจุบัน:
ner_ontonotes_bert_mult
เราเปิดตัวเซิร์ฟเวอร์ REST ด้วยโมเดล:
- เราติดตั้งการพึ่งพาโมเดลที่ระบุในการกำหนดค่าลงในสภาพแวดล้อมเสมือนที่ใช้งานอยู่:
python -m deeppavlov install ner_ontonotes_bert_mult
- ดาวน์โหลดส่วนประกอบโมเดลแบบอนุกรมจากเซิร์ฟเวอร์ DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_mult
ส่วนประกอบที่ทำให้เป็นอนุกรมจะถูกดาวน์โหลดไปยังโฮมไดเร็กทอรี DeepPavlov ซึ่งอยู่ตามค่าเริ่มต้น
~/.deeppavlov
เมื่อดาวน์โหลด แฮชของส่วนประกอบที่ดาวน์โหลดแล้วจะถูกตรวจสอบเทียบกับแฮชของส่วนประกอบที่อยู่บนเซิร์ฟเวอร์ หากมีข้อมูลที่ตรงกัน การดาวน์โหลดจะถูกข้ามไปและใช้ไฟล์ที่มีอยู่ ขนาดของส่วนประกอบที่ดาวน์โหลดอาจแตกต่างกันโดยเฉลี่ยตั้งแต่ 0.5 ถึง 8 Gb ในบางกรณีอาจถึง 20 Gb หลังจากการคลายซิป
- เราเปิดตัวเซิร์ฟเวอร์ REST ด้วยโมเดล:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
จากผลของการดำเนินการคำสั่งนี้ เซิร์ฟเวอร์ REST ที่มีโมเดลจะเปิดตัวบนพอร์ต 5005 ของเครื่องโฮสต์ (พอร์ตเริ่มต้นคือ 5000)
หลังจากเริ่มต้นโมเดลแล้ว คุณสามารถดู Swagger พร้อมเอกสารประกอบ API และความสามารถในการทดสอบได้ที่ URL http://127.0.0.1:5005
. มาทดสอบโมเดลโดยส่งไปยังจุดสิ้นสุดกันดีกว่า http://127.0.0.1:5005/model
คำขอ POST ที่มีเนื้อหา JSON ต่อไปนี้:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
ในการตอบสนองเราควรได้รับ JSON ต่อไปนี้:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["В", "юго", "-", "западной", "Руси", "стог", "жита", "оценен", "в", "15", "гривен"],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]
จากตัวอย่างเหล่านี้ เราจะวิเคราะห์ DeepPavlov REST API
API DeepPavlov
แต่ละโมเดล DeepPavlov มีอาร์กิวเมนต์อินพุตอย่างน้อยหนึ่งรายการ ใน REST API มีการตั้งชื่ออาร์กิวเมนต์ ชื่ออาร์กิวเมนต์คือคีย์ของพจนานุกรมที่เข้ามา ในกรณีส่วนใหญ่ อาร์กิวเมนต์คือข้อความที่ต้องประมวลผล ข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์และค่าที่ส่งคืนโดยโมเดลสามารถพบได้ในส่วน MODELS ของเอกสารประกอบ
ในตัวอย่าง รายการของสองสตริงถูกส่งผ่านไปยังอาร์กิวเมนต์ x ซึ่งแต่ละรายการได้รับการมาร์กอัปแยกกัน ใน DeepPavlov ทุกรุ่นจะใช้รายการ (ชุด) ของค่าที่ประมวลผลอย่างอิสระเป็นอินพุต
คำว่า “แบทช์” หมายถึงสาขาการเรียนรู้ของเครื่องและหมายถึงชุดของค่าอินพุตอิสระที่ประมวลผลโดยอัลกอริทึมหรือโครงข่ายประสาทเทียมพร้อมกัน แนวทางนี้ช่วยให้คุณลดเวลาที่โมเดลประมวลผลองค์ประกอบหนึ่งของชุดงาน (โดยมากมักมีนัยสำคัญ) เมื่อเทียบกับค่าเดียวกันที่ส่งไปยังอินพุตแยกกัน แต่ผลการประมวลผลจะออกหลังจากประมวลผลองค์ประกอบทั้งหมดแล้วเท่านั้น ดังนั้น เมื่อสร้างแบทช์ที่เข้ามา จำเป็นต้องคำนึงถึงความเร็วของโมเดลและเวลาประมวลผลที่จำเป็นสำหรับแต่ละองค์ประกอบด้วย
หากมีข้อโต้แย้งหลายประการสำหรับโมเดล DeepPavlov แต่ละข้อจะได้รับชุดค่าของตัวเอง และที่เอาต์พุต โมเดลจะสร้างคำตอบชุดเดียวเสมอ องค์ประกอบของแบตช์ขาออกคือผลลัพธ์ของการประมวลผลองค์ประกอบของแบตช์ขาเข้าด้วยดัชนีเดียวกัน
ในตัวอย่างข้างต้น ผลลัพธ์ของแบบจำลองคือการแบ่งแต่ละสตริงออกเป็นโทเค็น (คำและเครื่องหมายวรรคตอน) และจัดประเภทโทเค็นโดยสัมพันธ์กับเอนทิตีที่มีชื่อ (ชื่อองค์กร สกุลเงิน) ที่โทเค็นเป็นตัวแทน ปัจจุบันเป็นรุ่น ner_ontonotes_bert_mult สามารถจำแนกเอนทิตีที่มีชื่อได้ 18 ประเภท สามารถดูคำอธิบายโดยละเอียดได้
รุ่นอื่นๆ ที่แกะกล่องโดย DeepPavlov
นอกจาก NER แล้ว ยังมีรุ่นสำเร็จรูปต่อไปนี้ใน DeepPavlov ในขณะที่เขียน:
ข้อความตอบคำถาม
ตอบคำถามด้วยส่วนของข้อความนี้ การกำหนดค่าโมเดล: Squad_ru_bert_infer
คำขอตัวอย่าง:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
ผล:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
การตรวจจับการดูถูก
การตรวจจับการดูหมิ่นบุคคลที่กล่าวถึงข้อความ (ในขณะที่เขียน - สำหรับภาษาอังกฤษเท่านั้น) การกำหนดค่าโมเดล: insults_kaggle_conv_bert
คำขอตัวอย่าง:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
ผล:
[
["Not Insult"],
["Insult"]
]
การวิเคราะห์ความเชื่อมั่น
การจำแนกประเภทของความรู้สึกทางข้อความ (เชิงบวก เป็นกลาง ลบ) การกำหนดค่าโมเดล: rusentiment_elmo_twitter_cnn
คำขอตัวอย่าง:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
ผล:
[
["positive"],
["neutral"],
["negative"]
]
การตรวจจับการถอดความ
การกำหนดว่าข้อความสองฉบับที่แตกต่างกันมีความหมายเหมือนกันหรือไม่ การกำหนดค่าโมเดล: stand_paraphraser_en
ขอ:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
ผล:
[
[1],
[0]
]
คุณสามารถดูรายการรุ่น DeepPavlov ที่แกะกล่องทั้งหมดในปัจจุบันได้เสมอ
ข้อสรุป
ในบทความนี้ เราได้ทำความคุ้นเคยกับ DeepPavlov API และความสามารถในการประมวลผลข้อความบางส่วนของไลบรารีที่มีให้ทันที โปรดทราบว่าสำหรับงาน NLP ใด ๆ ผลลัพธ์ที่ดีที่สุดจะเกิดขึ้นได้เมื่อฝึกอบรมแบบจำลองบนชุดข้อมูลที่สอดคล้องกับสาขาวิชา (โดเมน) ของงาน นอกจากนี้ โดยหลักการแล้ว โมเดลจำนวนมากขึ้นไม่สามารถฝึกได้ในทุกสถานการณ์
ในบทความต่อไปนี้ เราจะดูการตั้งค่าเพิ่มเติมของไลบรารี การเปิดตัว DeepPavlov จาก Docker จากนั้นเราจะไปยังโมเดลการฝึกอบรม และอย่าลืมว่า DeepPavlov มี
ที่มา: will.com