ruby-spacy เป็นโมดูล wrapper สำหรับการใช้ spaCy จากภาษาการเขียนโปรแกรม Ruby ผ่าน PyCall โมดูลนี้มีจุดมุ่งหมายเพื่อให้โปรแกรมเมอร์ Ruby สามารถใช้ spaCy ได้อย่างง่ายดายและเป็นธรรมชาติ โมดูลนี้ครอบคลุมขอบเขตการทำงานของ spaCy สำหรับ การใช้ โมเดลภาษาที่หลากหลาย ไม่ใช่สำหรับ การสร้าง
ฟังก์ชั่นการทำงาน | |
---|---|
Tokenization, การแบ่งส่วนประโยค, การแบ่งส่วนประโยค | |
การแท็กส่วนของคำพูดและการแยกวิเคราะห์การอ้างอิง | |
การรับรู้เอนทิตีที่มีชื่อ | |
การสร้างภาพการพึ่งพาทางวากยสัมพันธ์ | |
เข้าถึงเวกเตอร์คำที่ผ่านการฝึกอบรมมาแล้ว | |
การรวม OpenAI Chat/Completion/Embeddings API |
เวอร์ชันปัจจุบัน: 0.2.3
สิ่งสำคัญ : ตรวจสอบให้แน่ใจว่าเปิดใช้งานตัวเลือก enable-shared
การเปิดใช้งานในการติดตั้ง Python ของคุณ คุณสามารถใช้ pyenv เพื่อติดตั้ง Python เวอร์ชันใดก็ได้ที่คุณต้องการ ติดตั้ง Python 3.10.6 โดยใช้ pyenv พร้อมด้วย enable-shared
ดังนี้:
$ env CONFIGURE_OPTS= " --enable-shared " pyenv install 3.10.6
อย่าลืมทำให้สามารถเข้าถึงได้จากไดเร็กทอรีการทำงานของคุณ ขอแนะนำให้คุณตั้งค่า global
เป็นเวอร์ชันของ python ที่คุณเพิ่งติดตั้ง
$ pyenv global 3.10.6
จากนั้นติดตั้ง spaCy หากคุณใช้ pip
คำสั่งต่อไปนี้จะทำ:
$ pip install spacy
ติดตั้งโมเดลภาษาที่ได้รับการฝึกอบรม สำหรับผู้เริ่มต้น en_core_web_sm
จะมีประโยชน์มากที่สุดในการดำเนินการประมวลผลข้อความพื้นฐานเป็นภาษาอังกฤษ อย่างไรก็ตาม หากคุณต้องการใช้คุณสมบัติขั้นสูงของ spaCy เช่น การจดจำเอนทิตีที่มีชื่อหรือการคำนวณความคล้ายคลึงกันของเอกสาร คุณควรติดตั้งโมเดลที่ใหญ่กว่า เช่น en_core_web_lg
$ python -m spacy download en_core_web_sm
$ python -m spacy download en_core_web_lg
ดู Spacy: รุ่นและภาษา สำหรับรุ่นอื่นๆ ในภาษาต่างๆ หากต้องการติดตั้งโมเดลสำหรับภาษาญี่ปุ่น คุณสามารถทำได้ดังนี้:
$ python -m spacy download ja_core_news_sm
$ python -m spacy download ja_core_news_lg
เพิ่มบรรทัดนี้ลงใน Gemfile ของแอปพลิเคชันของคุณ:
gem 'ruby-spacy'
แล้วดำเนินการ:
$ bundle install
หรือติดตั้งด้วยตัวเองเป็น:
$ gem install ruby-spacy
ดูตัวอย่างด้านล่าง
ตัวอย่างต่อไปนี้จำนวนมากคือการแปล Python เป็น Ruby ของส่วนย่อยโค้ดใน spaCy 101 สำหรับตัวอย่างเพิ่มเติม โปรดดูภายในไดเร็กทอรี examples
→ spaCy: โทเค็นไนซ์
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
row = [ ]
doc . each do | token |
row << token . text
end
headings = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
table = Terminal :: Table . new rows : [ row ] , headings : headings
puts table
เอาท์พุท:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|
แอปเปิล | เป็น | มอง | ที่ | ซื้อ | สหราชอาณาจักร | การเริ่มต้น | สำหรับ | - | 1 | พันล้าน |
→ spaCy: แท็กส่วนหนึ่งของคำพูดและการขึ้นต่อกัน
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
headings = [ "text" , "lemma" , "pos" , "tag" , "dep" ]
rows = [ ]
doc . each do | token |
rows << [ token . text , token . lemma , token . pos , token . tag , token . dep ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
ข้อความ | บทแทรก | ตำแหน่ง | แท็ก | ฝ่าย |
---|---|---|---|---|
แอปเปิล | แอปเปิล | พร็อพพีน | เอ็นเอ็นพี | เอ็นซับเจ |
เป็น | เป็น | ช่องรับสัญญาณเสียง | วีบีแซด | เสริม |
มอง | ดู | กริยา | วีบีจี | ราก |
ที่ | ที่ | เอดีพี | ใน | การเตรียมการ |
ซื้อ | ซื้อ | กริยา | วีบีจี | พีคอม |
สหราชอาณาจักร | สหราชอาณาจักร | พร็อพพีน | เอ็นเอ็นพี | ดอบเจ |
การเริ่มต้น | การเริ่มต้น | คำนาม | เอ็นเอ็น | โฆษณา |
สำหรับ | สำหรับ | เอดีพี | ใน | การเตรียมการ |
- | - | เอสวายเอ็ม | - | ปริมาณ mod |
1 | 1 | NUM | ซีดี | สารประกอบ |
พันล้าน | พันล้าน | NUM | ซีดี | พล |
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
doc = nlp . read ( "任天堂は1983年にファミコンを14,800円で発売した。" )
headings = [ "text" , "lemma" , "pos" , "tag" , "dep" ]
rows = [ ]
doc . each do | token |
rows << [ token . text , token . lemma , token . pos , token . tag , token . dep ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
ข้อความ | บทแทรก | ตำแหน่ง | แท็ก | ฝ่าย |
---|---|---|---|---|
任天堂 | 任天堂 | พร็อพพีน | 名詞-固有名詞-一般 | เอ็นซับเจ |
ฮะ | ฮะ | เอดีพี | 助詞-係助詞 | กรณี |
1983 | 1983 | NUM | 名詞-数詞 | นัมมด |
年 | 年 | คำนาม | 名詞-普通名詞-助数詞可能 | เฉียง |
に | に | เอดีพี | 助詞-格助詞 | กรณี |
ฟอมิคอน | ฟอมิคอน | คำนาม | 名詞-普通名詞-一般 | วัตถุประสงค์ |
を | を | เอดีพี | 助詞-格助詞 | กรณี |
14,800 | 14,800 | NUM | 名詞-数詞 | ที่ตายตัว |
円 | 円 | คำนาม | 名詞-普通名詞-助数詞可能 | เฉียง |
で | で | เอดีพี | 助詞-格助詞 | กรณี |
発売 | 発売 | กริยา | 名詞-普通名詞-サ変可能 | ราก |
ชิ | สุขุ | ช่องรับสัญญาณเสียง | 動詞-非自立可能 | เสริม |
ตะ | ตะ | ช่องรับสัญญาณเสียง | 助動詞 | เสริม |
- | - | พันช์ | 補助記号-句点 | ตรงเวลา |
→ POS และแท็กสัณฐานวิทยา
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
headings = [ "text" , "shape" , "is_alpha" , "is_stop" , "morphology" ]
rows = [ ]
doc . each do | token |
morph = token . morphology . map do | k , v |
" #{ k } = #{ v } "
end . join ( " n " )
rows << [ token . text , token . shape , token . is_alpha , token . is_stop , morph ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
ข้อความ | รูปร่าง | is_alpha | คือ_หยุด | สัณฐานวิทยา |
---|---|---|---|---|
แอปเปิล | xxxxx | จริง | เท็จ | NounType = ข้อเสนอ หมายเลข = ร้องเพลง |
เป็น | xx | จริง | จริง | อารมณ์ = ตัวบ่งชี้ หมายเลข = ร้องเพลง คน = 3 ตึงเครียด = ปธน กริยารูปแบบ = ครีบ |
มอง | xxxx | จริง | เท็จ | มุมมอง = Prog ตึงเครียด = ปธน กริยารูปแบบ = ส่วนหนึ่ง |
ที่ | xx | จริง | จริง | |
ซื้อ | xxxx | จริง | เท็จ | มุมมอง = Prog ตึงเครียด = ปธน กริยารูปแบบ = ส่วนหนึ่ง |
สหราชอาณาจักร | XX | เท็จ | เท็จ | NounType = ข้อเสนอ หมายเลข = ร้องเพลง |
การเริ่มต้น | xxxx | จริง | เท็จ | หมายเลข = ร้องเพลง |
สำหรับ | xxx | จริง | จริง | |
- | - | เท็จ | เท็จ | |
1 | ง | เท็จ | เท็จ | NumType = การ์ด |
พันล้าน | xxxx | จริง | เท็จ | NumType = การ์ด |
→ spaCy: วิชวลไลเซอร์
รหัสทับทิม:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
sentence = "Autonomous cars shift insurance liability toward manufacturers"
doc = nlp . read ( sentence )
dep_svg = doc . displacy ( style : "dep" , compact : false )
File . open ( File . join ( "test_dep.svg" ) , "w" ) do | file |
file . write ( dep_svg )
end
เอาท์พุท:
รหัสทับทิม:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
sentence = "Autonomous cars shift insurance liability toward manufacturers"
doc = nlp . read ( sentence )
dep_svg = doc . displacy ( style : "dep" , compact : true )
File . open ( File . join ( "test_dep_compact.svg" ) , "w" ) do | file |
file . write ( dep_svg )
end
เอาท์พุท:
→ spaCy: เอนทิตีที่มีชื่อ
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "Apple is looking at buying U.K. startup for $1 billion" )
rows = [ ]
doc . ents . each do | ent |
rows << [ ent . text , ent . start_char , ent . end_char , ent . label ]
end
headings = [ "text" , "start_char" , "end_char" , "label" ]
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
ข้อความ | start_char | end_char | ฉลาก |
---|---|---|---|
แอปเปิล | 0 | 5 | องค์กร |
สหราชอาณาจักร | 27 | 31 | เกรดเฉลี่ย |
1 พันล้านดอลลาร์ | 44 | 54 | เงิน |
รหัสทับทิม:
require ( "ruby-spacy" )
require "terminal-table"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
sentence = "任天堂は1983年にファミコンを14,800円で発売した。"
doc = nlp . read ( sentence )
rows = [ ]
doc . ents . each do | ent |
rows << [ ent . text , ent . start_char , ent . end_char , ent . label ]
end
headings = [ "text" , "start" , "end" , "label" ]
table = Terminal :: Table . new rows : rows , headings : headings
print table
เอาท์พุท:
ข้อความ | เริ่ม | จบ | ฉลาก |
---|---|---|---|
任天堂 | 0 | 3 | องค์กร |
1983年 | 4 | 9 | วันที่ |
ฟอมิคอน | 10 | 15 | ผลิตภัณฑ์ |
14,800เยน | 16 | 23 | เงิน |
→ spaCy: เวกเตอร์ของ Word และความคล้ายคลึงกัน
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_lg" )
doc = nlp . read ( "dog cat banana afskfsd" )
rows = [ ]
doc . each do | token |
rows << [ token . text , token . has_vector , token . vector_norm , token . is_oov ]
end
headings = [ "text" , "has_vector" , "vector_norm" , "is_oov" ]
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
ข้อความ | มี_เวกเตอร์ | เวกเตอร์_บรรทัดฐาน | is_oov |
---|---|---|---|
สุนัข | จริง | 7.0336733 | เท็จ |
แมว | จริง | 6.6808186 | เท็จ |
กล้วย | จริง | 6.700014 | เท็จ |
afskfsd | เท็จ | 0.0 | จริง |
รหัสทับทิม:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "en_core_web_lg" )
doc1 = nlp . read ( "I like salty fries and hamburgers." )
doc2 = nlp . read ( "Fast food tastes very good." )
puts "Doc 1: " + doc1 . text
puts "Doc 2: " + doc2 . text
puts "Similarity: #{ doc1 . similarity ( doc2 ) } "
เอาท์พุท:
Doc 1: I like salty fries and hamburgers.
Doc 2: Fast food tastes very good.
Similarity: 0.7687607012190486
รหัสทับทิม:
require "ruby-spacy"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
ja_doc1 = nlp . read ( "今日は雨ばっかり降って、嫌な天気ですね。" )
puts "doc1: #{ ja_doc1 . text } "
ja_doc2 = nlp . read ( "あいにくの悪天候で残念です。" )
puts "doc2: #{ ja_doc2 . text } "
puts "Similarity: #{ ja_doc1 . similarity ( ja_doc2 ) } "
เอาท์พุท:
doc1: 今日は雨ばっかり降って、嫌な天気ですね。
doc2: あいにくの悪天候で残念です。
Similarity: 0.8684192637149641
โตเกียว - ญี่ปุ่น + ฝรั่งเศส = ปารีส ?
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "en_core_web_lg" )
tokyo = nlp . get_lexeme ( "Tokyo" )
japan = nlp . get_lexeme ( "Japan" )
france = nlp . get_lexeme ( "France" )
query = tokyo . vector - japan . vector + france . vector
headings = [ "rank" , "text" , "score" ]
rows = [ ]
results = nlp . most_similar ( query , 10 )
results . each_with_index do | lexeme , i |
index = ( i + 1 ) . to_s
rows << [ index , lexeme . text , lexeme . score ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
อันดับ | ข้อความ | คะแนน |
---|---|---|
1 | ฝรั่งเศส | 0.8346999883651733 |
2 | ฝรั่งเศส | 0.8346999883651733 |
3 | ฝรั่งเศส | 0.8346999883651733 |
4 | ปารีส | 0.7703999876976013 |
5 | ปารีส | 0.7703999876976013 |
6 | ปารีส | 0.7703999876976013 |
7 | ตูลูส | 0.6381999850273132 |
8 | ตูลูส | 0.6381999850273132 |
9 | ตูลูส | 0.6381999850273132 |
10 | มาร์เซย์ | 0.6370999813079834 |
東京 - 日本 + FRANCE = パリ ?
รหัสทับทิม:
require "ruby-spacy"
require "terminal-table"
nlp = Spacy :: Language . new ( "ja_core_news_lg" )
tokyo = nlp . get_lexeme ( "東京" )
japan = nlp . get_lexeme ( "日本" )
france = nlp . get_lexeme ( "フランス" )
query = tokyo . vector - japan . vector + france . vector
headings = [ "rank" , "text" , "score" ]
rows = [ ]
results = nlp . most_similar ( query , 10 )
results . each_with_index do | lexeme , i |
index = ( i + 1 ) . to_s
rows << [ index , lexeme . text , lexeme . score ]
end
table = Terminal :: Table . new rows : rows , headings : headings
puts table
เอาท์พุท:
อันดับ | ข้อความ | คะแนน |
---|---|---|
1 | เมรี | 0.7376999855041504 |
2 | ฟรานซิส | 0.7221999764442444 |
3 | 東京 | 0.6697999835014343 |
4 | สโตรลาสブール | 0.631600022315979 |
5 | ลีออน | 0.5939000248908997 |
6 | ปารีส | 0.574400007724762 |
7 | ベルギー | 0.5683000087738037 |
8 | ニース | 0.5679000020027161 |
9 | อัลลอซ | 0.5644999742507935 |
10 | 南仏 | 0.5547999739646912 |
คุณลักษณะนี้อยู่ระหว่างการทดลอง รายละเอียดอาจมีการเปลี่ยนแปลง โปรดดูการอ้างอิง API ของ OpenAI และ Ruby OpenAI สำหรับพารามิเตอร์ที่มี ( max_tokens
,temperature
, ฯลฯ )
ใช้ประโยชน์จากโมเดล GPT ภายใน Ruby-space ได้อย่างง่ายดายโดยใช้คีย์ OpenAI API เมื่อสร้างพรอมต์สำหรับเมธอด Doc::openai_query
คุณสามารถรวมคุณสมบัติโทเค็นต่อไปนี้ของเอกสารได้ คุณสมบัติเหล่านี้จะถูกดึงข้อมูลผ่านการเรียกใช้ฟังก์ชัน (สร้างขึ้นภายในโดย GPT เมื่อจำเป็น) และผสานรวมเข้ากับข้อความแจ้งของคุณได้อย่างราบรื่น โปรดทราบว่าการเรียกใช้ฟังก์ชันต้องมี gpt-4o-mini
ขึ้นไป คุณสมบัติที่มีอยู่ ได้แก่ :
surface
lemma
tag
pos
(ส่วนหนึ่งของคำพูด)dep
(การพึ่งพา)ent_type
(ประเภทเอนทิตี)morphology
รหัสทับทิม:
require "ruby-spacy"
api_key = ENV [ "OPENAI_API_KEY" ]
nlp = Spacy :: Language . new ( "en_core_web_sm" )
doc = nlp . read ( "The Beatles released 12 studio albums" )
# default parameter values
# max_tokens: 1000
# temperature: 0.7
# model: "gpt-4o-mini"
res1 = doc . openai_query (
access_token : api_key ,
prompt : "Translate the text to Japanese."
)
puts res1
เอาท์พุท:
ビートルズと12枚のスTAジオÁルBAムをリースしました。
รหัสทับทิม:
require "ruby-spacy"
api_key = ENV [ "OPENAI_API_KEY" ]
nlp = Spacy