ชาวจีน
ภาษาอังกฤษ
A ซึ่งหมายถึง "Oracle Bone Classical Chinese" เป็นชุดเครื่องมือ NLP ที่มุ่งเน้นไปที่การประมวลผลจีนโบราณ
ปัจจุบันเครื่องมือ NLP จีนทั่วไปส่วนใหญ่ใช้ภาษาจีนสมัยใหม่เป็นคอร์ปัสหลักและผลการประมวลผลของจีนโบราณไม่เป็นที่น่าพอใจ (ดูรายละเอียดของคำนาม) ความตั้งใจดั้งเดิมของโครงการนี้คือการช่วยในการประมวลผลข้อมูลจีนโบราณและช่วยเหลือนักวิชาการและผู้ที่ชื่นชอบชาวจีนโบราณที่สนใจขุดแร่ธาตุวัฒนธรรมโบราณเพื่อวิเคราะห์และใช้วัสดุจีนคลาสสิกเพื่อสร้าง "ผลิตภัณฑ์วัฒนธรรมใหม่" จาก "มรดกทางวัฒนธรรม"
เวอร์ชันปัจจุบันรองรับห้าฟังก์ชั่น: การก่อสร้างพจนานุกรม, การแบ่งส่วนคำอัตโนมัติ, คำอธิบายประกอบส่วนหนึ่ง, การอ่านประโยคและเครื่องหมายวรรคตอนภาษาจีนคลาสสิกและฟังก์ชั่นอื่น ๆ อยู่ระหว่างการพัฒนา
$ pip install jiayan
$ pip install https://github.com/kpu/kenlm/archive/master.zip
โมดูลต่อไปนี้ใช้จากตัวอย่าง
ดาวน์โหลดโมเดลและการบีบอัด: Baidu Netdisk, Extract Code: p0sc
การก่อสร้างอรรถาภิธาน
from jiayan import PMIEntropyLexiconConstructor
constructor = PMIEntropyLexiconConstructor()
lexicon = constructor.construct_lexicon('庄子.txt')
constructor.save(lexicon, '庄子词库.csv')
ผลลัพธ์:
Word,Frequency,PMI,R_Entropy,L_Entropy
之,2999,80,7.944909328101839,8.279435615456894
而,2089,80,7.354575005231323,8.615211168836439
不,1941,80,7.244331150611089,6.362131306822925
...
天下,280,195.23602384978196,5.158574399464853,5.24731990592901
圣人,111,150.0620531154239,4.622606551534004,4.6853474419338585
万物,94,377.59805590304126,4.5959107835319895,4.538837960294887
天地,92,186.73504238078462,3.1492586603863617,4.894533538722486
孔子,80,176.2550051738876,4.284638190120882,2.4056390622295662
庄子,76,169.26227942514097,2.328252899085616,2.1920058354921066
仁义,58,882.3468468468468,3.501609497059026,4.96900162987599
老聃,45,2281.2228260869565,2.384853500510039,2.4331958387289765
...
คำกริยา
ตัวละครระดับที่ซ่อนอยู่ของมาร์กอฟโมเดลคำว่าคำกริยาเอฟเฟกต์สอดคล้องกับความรู้สึกของภาษาขอแนะนำให้ใช้และรูปแบบภาษา jiayan.klm จำเป็นต้องโหลด
from jiayan import load_lm
from jiayan import CharHMMTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
lm = load_lm('jiayan.klm')
tokenizer = CharHMMTokenizer(lm)
print(list(tokenizer.tokenize(text)))
ผลลัพธ์:
['是', '故', '内圣外王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
เนื่องจากจีนโบราณไม่มีข้อมูลการแบ่งส่วนคำสาธารณะจึงเป็นไปไม่ได้ที่จะประเมินผลกระทบ แต่เราสามารถรู้สึกได้ข้อดีของโครงการนี้ผ่านเครื่องมือ NLP ที่แตกต่างกัน:
ลองเปรียบเทียบผลลัพธ์ของ LTP (3.4.0) ผลลัพธ์ของโมเดล:
['是', '故内', '圣外王', '之', '道', ',', '暗而不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉以自为方', '。']
ลองเปรียบเทียบผลลัพธ์ของคำศัพท์ HANLP อีกครั้ง:
['是故', '内', '圣', '外', '王之道', ',', '暗', '而', '不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各为其所欲焉', '以', '自为', '方', '。']
จะเห็นได้ว่าคำว่าผลกระทบของเครื่องมือนี้ต่อจีนโบราณนั้นดีกว่าเครื่องมือ NLP จีนทั่วไปอย่างมีนัยสำคัญ
*อัปเดต: ขอบคุณ Hankc ผู้แต่งของ Hanlp ที่แจ้งให้คุณทราบ - ตั้งแต่ต้นปี 2021 HANLP เปิดตัวการเรียนรู้อย่างลึกซึ้ง 2.x เนื่องจากการใช้แบบจำลองภาษาที่ผ่านการฝึกอบรมมาก่อนในคลังข้อมูลขนาดใหญ่คลังข้อมูลเหล่านี้ได้รวมจีนโบราณและสมัยใหม่เกือบทั้งหมดบนอินเทอร์เน็ตดังนั้นผลกระทบต่อจีนโบราณได้รับการปรับปรุงในเชิงคุณภาพ ไม่เพียง แต่คำกริยาเท่านั้น แต่ยังรวมถึงผลการเรียนรู้ส่วนหนึ่งและการวิเคราะห์ความหมาย สำหรับเอฟเฟกต์คำที่เฉพาะเจาะจงที่สอดคล้องกันโปรดดูปัญหานี้
ระดับความน่าจะเป็นระดับสูงสุดของคำศัพท์โดยทั่วไปในหน่วยของตัวละครที่มีขนาดเกรนหยาบ
from jiayan import WordNgramTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
tokenizer = WordNgramTokenizer()
print(list(tokenizer.tokenize(text)))
ผลลัพธ์:
['是', '故', '内', '圣', '外', '王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
ส่วนหนึ่งของคำอธิบายประกอบการพูด
from jiayan import CRFPOSTagger
words = ['天下', '大乱', ',', '贤圣', '不', '明', ',', '道德', '不', '一', ',', '天下', '多', '得', '一', '察', '焉', '以', '自', '好', '。']
postagger = CRFPOSTagger()
postagger.load('pos_model')
print(postagger.postag(words))
ผลลัพธ์:
['n', 'a', 'wp', 'n', 'd', 'a', 'wp', 'n', 'd', 'm', 'wp', 'n', 'a', 'u', 'm', 'v', 'r', 'p', 'r', 'a', 'wp']
ทำลายประโยค
from jiayan import load_lm
from jiayan import CRFSentencizer
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
sentencizer = CRFSentencizer(lm)
sentencizer.load('cut_model')
print(sentencizer.sentencize(text))
ผลลัพธ์:
['天下大乱', '贤圣不明', '道德不一', '天下多得一察焉以自好', '譬如耳目', '皆有所明', '不能相通', '犹百家众技也', '皆有所长', '时有所用', '虽然', '不该不遍', '一之士也', '判天地之美', '析万物之理', '察古人之全', '寡能备于天地之美', '称神之容', '是故内圣外王之道', '暗而不明', '郁而不发', '天下之人各为其所欲焉以自为方', '悲夫', '百家往而不反', '必不合矣', '后世之学者', '不幸不见天地之纯', '古之大体', '道术将为天下裂']
วรรคตอน
from jiayan import load_lm
from jiayan import CRFPunctuator
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
punctuator = CRFPunctuator(lm, 'cut_model')
punctuator.load('punc_model')
print(punctuator.punctuate(text))
ผลลัพธ์:天下大乱,贤圣不明,道德不一,天下多得一察焉以自好,譬如耳目,皆有所明,不能相通,犹百家众技也,皆有所长,时有所用,虽然,不该不遍,一之士也,判天地之美,析万物之理,察古人之全,寡能备于天地之美,称神之容,是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方,悲夫!百家往而不反,必不合矣,后世之学者,不幸不见天地之纯,古之大体,道术将为天下裂。
Jiany ซึ่งหมายถึงตัวละครจีนที่จารึกไว้บนกระดูก Oracle เป็นเครื่องมือ Python NLP มืออาชีพสำหรับภาษาจีนคลาสสิก
เครื่องมือ NLP จีนที่มีอยู่ทั่วไปส่วนใหญ่ได้รับการฝึกฝนเกี่ยวกับข้อมูลจีนสมัยใหม่ซึ่งนำไปสู่ประสิทธิภาพที่ไม่ดีในภาษาจีนคลาสสิก (ดู tokenizing ) วัตถุประสงค์ของโครงการนี้คือเพื่อช่วยเหลือการประมวลผลข้อมูลภาษาจีนคลาสสิก
เวอร์ชันปัจจุบันรองรับการก่อสร้างพจนานุกรม, tokenizing, การติดแท็ก POS, การแบ่งส่วนประโยคและเครื่องหมายวรรคตอนอัตโนมัติมีการพัฒนาคุณสมบัติเพิ่มเติม
$ pip install jiayan
$ pip install https://github.com/kpu/kenlm/archive/master.zip
รหัสการใช้งานด้านล่างทั้งหมดมาจากตัวอย่าง
ดาวน์โหลดรุ่นและคลายซิป: Google Drive
การก่อสร้างพจนานุกรม
from jiayan import PMIEntropyLexiconConstructor
constructor = PMIEntropyLexiconConstructor()
lexicon = constructor.construct_lexicon('庄子.txt')
constructor.save(lexicon, 'Zhuangzi_Lexicon.csv')
ผลลัพธ์:
Word,Frequency,PMI,R_Entropy,L_Entropy
之,2999,80,7.944909328101839,8.279435615456894
而,2089,80,7.354575005231323,8.615211168836439
不,1941,80,7.244331150611089,6.362131306822925
...
天下,280,195.23602384978196,5.158574399464853,5.24731990592901
圣人,111,150.0620531154239,4.622606551534004,4.6853474419338585
万物,94,377.59805590304126,4.5959107835319895,4.538837960294887
天地,92,186.73504238078462,3.1492586603863617,4.894533538722486
孔子,80,176.2550051738876,4.284638190120882,2.4056390622295662
庄子,76,169.26227942514097,2.328252899085616,2.1920058354921066
仁义,58,882.3468468468468,3.501609497059026,4.96900162987599
老聃,45,2281.2228260869565,2.384853500510039,2.4331958387289765
...
การทำให้โทเค็น
อืมตามตัวละครแนะนำรูปแบบภาษาต้องการ: jiayan.klm
from jiayan import load_lm
from jiayan import CharHMMTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
lm = load_lm('jiayan.klm')
tokenizer = CharHMMTokenizer(lm)
print(list(tokenizer.tokenize(text)))
ผลลัพธ์:
['是', '故', '内圣外王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
เนื่องจากไม่มีข้อมูลที่เป็นโทเค็นสาธารณะสำหรับภาษาจีนคลาสสิกจึงยากที่จะทำการประเมินประสิทธิภาพโดยตรง อย่างไรก็ตามเราสามารถเปรียบเทียบผลลัพธ์กับเครื่องมือ NLP จีนสมัยใหม่ที่ได้รับความนิยมอื่น ๆ เพื่อตรวจสอบประสิทธิภาพ:
เปรียบเทียบผลโทเค็นของ LTP (3.4.0):
['是', '故内', '圣外王', '之', '道', ',', '暗而不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉以自为方', '。']
นอกจากนี้เปรียบเทียบผลลัพธ์ของ HANLP:
['是故', '内', '圣', '外', '王之道', ',', '暗', '而', '不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各为其所欲焉', '以', '自为', '方', '。']
เห็นได้ชัดว่าเจียยานมีประสิทธิภาพที่ดีกว่าเครื่องมือ NLP จีนทั่วไป
เส้นทางความน่าจะเป็นสูงสุดที่เข้าใกล้โทเค็นตามคำพูด
from jiayan import WordNgramTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
tokenizer = WordNgramTokenizer()
print(list(tokenizer.tokenize(text)))
ผลลัพธ์:
['是', '故', '内', '圣', '外', '王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
การติดแท็ก POS
from jiayan import CRFPOSTagger
words = ['天下', '大乱', ',', '贤圣', '不', '明', ',', '道德', '不', '一', ',', '天下', '多', '得', '一', '察', '焉', '以', '自', '好', '。']
postagger = CRFPOSTagger()
postagger.load('pos_model')
print(postagger.postag(words))
ผลลัพธ์:
['n', 'a', 'wp', 'n', 'd', 'a', 'wp', 'n', 'd', 'm', 'wp', 'n', 'a', 'u', 'm', 'v', 'r', 'p', 'r', 'a', 'wp']
การแบ่งส่วนประโยค
from jiayan import load_lm
from jiayan import CRFSentencizer
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
sentencizer = CRFSentencizer(lm)
sentencizer.load('cut_model')
print(sentencizer.sentencize(text))
ผลลัพธ์:
['天下大乱', '贤圣不明', '道德不一', '天下多得一察焉以自好', '譬如耳目', '皆有所明', '不能相通', '犹百家众技也', '皆有所长', '时有所用', '虽然', '不该不遍', '一之士也', '判天地之美', '析万物之理', '察古人之全', '寡能备于天地之美', '称神之容', '是故内圣外王之道', '暗而不明', '郁而不发', '天下之人各为其所欲焉以自为方', '悲夫', '百家往而不反', '必不合矣', '后世之学者', '不幸不见天地之纯', '古之大体', '道术将为天下裂']
วรรคตอน
from jiayan import load_lm
from jiayan import CRFPunctuator
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
punctuator = CRFPunctuator(lm, 'cut_model')
punctuator.load('punc_model')
print(punctuator.punctuate(text))
ผลลัพธ์:天下大乱,贤圣不明,道德不一,天下多得一察焉以自好,譬如耳目,皆有所明,不能相通,犹百家众技也,皆有所长,时有所用,虽然,不该不遍,一之士也,判天地之美,析万物之理,察古人之全,寡能备于天地之美,称神之容,是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方,悲夫!百家往而不反,必不合矣,后世之学者,不幸不见天地之纯,古之大体,道术将为天下裂。