Saat mesin pencari merayapi situs web, mereka berusaha sebaik mungkin untuk mendapatkan informasi sebanyak mungkin dari halaman tersebut. Meskipun ada perkembangan besar-besaran dalam hal ini, paling banter mereka hanya menebak-nebak kemungkinan informasi yang mereka ekstrak.
Menyediakan data terstruktur kepada mesin pencari membuatnya lebih mudah dan memungkinkan aplikasi dan penggunaan data yang menarik.
Artikel ini akan menunjukkan kepada Anda cara meningkatkan kualitas halaman web Anda menggunakan data terstruktur dan bantuan model Chatgpt yang dilengkapi sendiri. Kami akan mengikis situs Wikipedia dan menggunakannya untuk menambah nilai pada halaman web yang ditargetkan.
Daftar Isi
Mengotomatiskan pembuatan data terstruktur untuk situs web berskala besar dengan LLM
Dalam banyak kasus, kita dihadapkan pada situasi di mana kita memiliki banyak halaman yang tidak berisi data terstruktur, namun perlu dilakukan. Tentu saja kita dapat mengadopsi rute manual dan mengklasifikasikan/menandai konten kita satu per satu. Kami juga dapat memeriksa kemajuan terkini yang menggunakan model bahasa besar dan melatihnya untuk tugas khusus mengekstraksi data spesifik dari halaman kami dan membuat markup tambahan yang diinginkan dalam bentuk skrip JSON-LD. Namun, kami tidak terbatas pada format ini, setelah kami memiliki akses ke data, kami dapat memformatnya sesuai keinginan.
Berikut ini ikhtisar singkat masalah yang mungkin kita hadapi dan langkah-langkah yang disarankan untuk mengatasinya:
- Kami memiliki situs web besar dengan (puluhan atau ratusan) ribu halaman yang tidak memiliki markup terstruktur (misalnya JSON-LD, Twitter, OpenGraph).
- Kami ingin membuat markup terstruktur untuk halaman ini.
- Kami ingin melakukan ini dalam skala besar.
- Kami akan melatih LLM untuk mengekstrak entitas dari artikel dan menyediakan link ke halaman Wikipedia masing-masing entitas.
Untuk lebih jelasnya kami akan memberikan masukan kepada ChatGPT sebagai berikut. Ini adalah bagian ringkasan dari halaman Wikipedia, “Bola Basket” dalam hal ini. Hanya beberapa baris pertama yang ditampilkan, dan kita akan membahas contoh lengkapnya nanti:
Basketball is a team sport in which two teams, most commonly of five players each, opposing one another on a rectangular court, compete with the primary objective of shooting a basketball (approximately 9.4 inches (24 cm) in diameter) through the defender’s hoop (a basket 18 inches (46 cm) in diameter mounted 10 feet (3.048 m) high to a backboard at each end of the court), while preventing the opposing team from shooting through their own hoop. A field goal is worth two points, unless made from behind the three-point line, when it is worth three…
Dan kami ingin mendapatkan jawaban seperti ini:
BEI | badan hukum | URL |
0 | James Naismith | https://en.wikipedia.org/wiki/james_naismith |
1 | Springfield,Massachusetts | https://en.wikipedia.org/wiki/springfield,_massachusetts |
2 | Asosiasi Bola Basket Nasional | https://en.wikipedia.org/wiki/national_basketball_association |
3 | NBA | https://en.wikipedia.org/wiki/national_basketball_association |
4 | Liga Euro | https://en.wikipedia.org/wiki/euroleague |
5 | Liga Champions Bola Basket Amerika | https://en.wikipedia.org/wiki/Basketball_Champions_league_americas |
6 | Piala Dunia Bola Basket FIBA | https://en.wikipedia.org/wiki/fiba_basketball_world_cup |
7 | keranjang Euro | https://en.wikipedia.org/wiki/eurobasket |
8 | Fiba Amerika | https://en.wikipedia.org/wiki/fiba_americup |
9 | Piala Dunia Bola Basket Wanita FIBA | https://en.wikipedia.org/wiki/fiba_women%27S_BASKETBALL_WORLD_CUP |
10 | Wnba | https://en.wikipedia.org/wiki/women%27s_national_basketball_association |
11 | Kejuaraan Bola Basket Divisi I Wanita NCAA | https://en.wikipedia.org/wiki/ncaa_division_i_women%27S_Basketball_Tournament |
12 | Wanita Liga Euro | https://en.wikipedia.org/wiki/euroleague_women |
Ini adalah tujuan yang cukup ambisius untuk mengotomatiskan proses ekstraksi entitas, dan tidak hanya itu, kami juga akan mendapatkan URL Wikipedia masing-masing.
Setelah kami memiliki URL ini, mendapatkan lebih banyak informasi tentang setiap entitas menjadi lebih mudah karena kami dapat mengikis halaman tersebut, menelusuri Google, dan seterusnya. Tapi kita memerlukan beranda pertama itu terlebih dahulu. Kami tidak akan melampaui langkah ini dalam artikel ini dan akan fokus pada prosesnya hingga saat ini.
Dorongan normal vs. LLM penyempurnaan
Sebelum kita memulai pengkodean, pertama-tama mari kita bedakan antara model prompt normal dan model yang disempurnakan. Perintah berkala adalah instruksi atau pertanyaan sederhana yang menginstruksikan model untuk menyelesaikan tugas tertentu, menjawab pertanyaan, atau membuat konten. Ini bertujuan untuk menjadi mesin tanya jawab universal yang dapat bertindak sebagai asisten pribadi Anda.
Di sisi lain, saat kami menyetel model, kami melatih LLM pada tugas tertentu yang kinerjanya jauh lebih baik daripada perintah biasa untuk mengetahui cara melakukan tugas tersebut. Hal ini mirip dengan perbedaan antara mobil biasa (prompt normal) dan kereta bawah tanah (model yang disempurnakan).
Mobil Anda dapat digunakan untuk berbagai tugas dan memenuhi hampir semua kebutuhan transportasi kita. Kereta bawah tanah hanya dapat melakukan satu hal, berangkat dari titik A ke titik B dan sebaliknya. Ini sangat terbatas, namun melakukan tugas ini dengan sangat baik, jauh lebih baik daripada mobil dan dalam skala yang jauh lebih besar. Berikut perbandingan singkat antara kedua pendekatan ini:
Daerah | Permintaan biasa | Model penyempurnaan |
Cakupan | Umumnya | Spesifik |
Proses pelatihan | Termasuk dalam perintahnya | Dibuat dengan memberikan banyak contoh serupa yang konsisten |
masyarakat umum | Jack dari semua toko | Alat yang sangat spesifik |
Anda mungkin sudah bereksperimen dengan perintah normal dan untuk tugas di atas, seperti berikut:
"Extract the main entities of the following text, and provide the Wikipedia URL for each, format the response as a table:
FULL TEXT GOES HERE"
Saat ini, di sini Anda terjebak dengan situasi paradoks yang timbul dari keterbatasan durasi instan. Jika Anda ingin mendapatkan jawaban yang baik, Anda perlu memberikan instruksi yang sangat rinci, cepat dan jelas beserta contohnya. Semakin banyak contoh dan instruksi yang Anda berikan, semakin sedikit ruang yang Anda miliki untuk menyediakan konten yang perlu diproses.
Hal sebaliknya juga terjadi. Dengan model yang disempurnakan, Anda hanya mengirim sepotong teks yang berfungsi sebagai perintah. Model terlatih kita tidak akan memikirkan atau mencoba apa pun selain dari apa yang telah dilatih untuk dilakukannya (tugas di atas).
Mari kita dengan cepat menjalani proses sederhana dalam melatih LLM dengan model yang telah disesuaikan:
mengingatkan | Menjawab |
Biru | Menjadi |
bunga | NS |
Buku | bk |
laut | duduk |
Jendela | ww |
mobil | Kr |
Tas | ?? |
Setelah melihat contoh di atas, mungkin mudah bagi Anda untuk mengetahui cara menyelesaikan tas prompt terakhir karena contoh di atas konsisten dan paling jelas. Setiap jawaban hanya berisi dua huruf, dan jika dikaitkan dengan promptnya masing-masing, Anda dapat melihat dengan jelas bahwa mereka pada dasarnya adalah karakter pertama dan terakhir dari prompt tersebut. Semakin banyak contoh yang kami berikan, Anda akan semakin yakin bahwa ini memang pola yang kami cari. Kuncinya di sini adalah menyediakan pasangan respons cepat yang banyak, jelas, dan yang paling penting, konsisten.
Inilah cara kami melatih Chatgpt untuk mengekstrak unit yang diperlukan. “Permintaan” kami hanya berupa sebuah artikel dan mencari tahu apa yang harus dilakukan dengannya (dengan asumsi kami melakukan pekerjaan dengan baik dalam fase pelatihan).
Dengan mengingat hal ini, petunjuk kami akan sangat sederhana. Mereka tidak akan berisi instruksi atau klarifikasi apa pun. Kesulitannya, bagaimanapun, adalah memberikan sejumlah besar contoh dimana LLM dapat dengan jelas memperoleh pola yang kita cari.
Rencana pelatihan
Kita perlu menyediakan dataset dengan ketentuan sebagai berikut:
- Jumlah artikel banyak (ratusan)
- Barang-barang ini perlu diidentifikasi dan diambil oleh manusia
- Kami tidak hanya ingin mendapatkan entitasnya, kami juga memerlukan URL Wikipedia setiap entitas
Di mana kami dapat menemukan kumpulan data seperti itu? Di Wikipedia sendiri, memenuhi semua persyaratan ini. Itu mudah. Sekarang implementasinya. Untungnya, Wikipedia API menyediakan beberapa fungsi praktis untuk mempermudah pekerjaan kita. Untuk setiap artikel kita dapat mendownload teks beserta berbagai elemen menariknya. Kami akan fokus pada dua di antaranya:
- Ringkasan: Ini adalah paragraf pertama yang kita lihat di awal setiap artikel.
- Kiri: Daftar semua tautan dalam artikel
import re import json import advertools as adv import pandas as pd import wikipediaapi pd.options.display.max_columns = None from IPython.display import display_html, display_markdown, IFrame import openai openai.api_key = 'YOUR OPEN AI API KEY'
Memperoleh data dari Wikipedia API
Pertama-tama kita akan melalui proses langkah demi langkah untuk artikel Wikipedia dan kemudian menggeneralisasikannya.
Kami memulai yang pertama Wikipedia
objek dan kemudian menggunakannya untuk mendapatkan data untuk setiap halaman. Untuk menentukan halaman yang kita butuhkan, kita memerlukan folder terakhir dari bagian jalur URL https://en.wikipedia.org/wiki/Article_title
“Artikel_Judul” dalam hal ini. Ini sangat penting karena tidak selalu mudah untuk menutup bagian URL ini. Dalam beberapa kasus caranya mudah /Pizza
atau /Music
namun dalam banyak kasus tidak seperti itu /FIBA_Women's_Basketball_World_Cup
Kami sekarang membuat variabel untuk halaman yang kami inginkan:
wiki_wiki = wikipediaapi.Wikipedia('en') page_basketball = wiki_wiki.page('Basketball') print(page_basketball.summary(:1500))
Basketball is a team sport in which two teams, most commonly of five players each, opposing one another on a rectangular court, compete with the primary objective of shooting a basketball (approximately 9.4 inches (24 cm) in diameter) through the defender's hoop (a basket 18 inches (46 cm) in diameter mounted 10 feet (3.048 m) high to a backboard at each end of the court), while preventing the opposing team from shooting through their own hoop. A field goal is worth two points, unless made from behind the three-point line, when it is worth three. After a foul, timed play stops and the player fouled or designated to shoot a technical foul is given one, two or three one-point free throws. The team with the most points at the end of the game wins, but if regulation play expires with the score tied, an additional period of play (overtime) is mandated. Players advance the ball by bouncing it while walking or running (dribbling) or by passing it to a teammate, both of which require considerable skill. On offense, players may use a variety of shots – the layup, the jump shot, or a dunk; on defense, they may steal the ball from a dribbler, intercept passes, or block shots; either offense or defense may collect a rebound, that is, a missed shot that bounces from rim or backboard. It is a violation to lift or drag one's pivot foot without dribbling the ball, to carry it, or to hold the ball with both hands then resume dribbling. The five players on each side fall into five playing posi
Seperti yang Anda lihat, kami dapat meminta ini summary
Atribut objek ini ke teks ringkasan. Di atas kita memiliki paragraf pertama ringkasan.
Atribut menarik lainnya yang bisa kita dapatkan adalah ini link
Atribut. Ini memberi kita teks setiap tautan serta informasi tambahan tentang setiap tautan. Di sini kita melihat tautan pertama dan juga mencetak jumlah total tautan untuk mendapatkan gambaran.
Dapatkan tautan artikel
print(len(page_basketball.links)) list(page_basketball.links.items())(:20)
1309
(('16-inch softball', 16-inch softball (id: ??, ns: 0)), ('1936 Summer Olympics', 1936 Summer Olympics (id: ??, ns: 0)), ('1979 NBL Season', 1979 NBL Season (id: ??, ns: 0)), ('1992 Summer Olympics', 1992 Summer Olympics (id: ??, ns: 0)), ("1992 United States men's Olympic basketball team", 1992 United States men's Olympic basketball team (id: ??, ns: 0)), ('1998 NBL Season', 1998 NBL Season (id: ??, ns: 0)), ('1998–99 NBL season', 1998–99 NBL season (id: ??, ns: 0)), ('1–2–1–1 zone press', 1–2–1–1 zone press (id: ??, ns: 0)), ('1–3–1 defense and offense', 1–3–1 defense and offense (id: ??, ns: 0)), ('2000–01 FIBA SuproLeague', 2000–01 FIBA SuproLeague (id: ??, ns: 0)), ('2004 Summer Olympics', 2004 Summer Olympics (id: ??, ns: 0)), ('2006 FIBA World Championship for Women', 2006 FIBA World Championship for Women (id: ??, ns: 0)), ('2007 Asian Indoor Games', 2007 Asian Indoor Games (id: ??, ns: 0)), ("2008 United States men's Olympic basketball team", 2008 United States men's Olympic basketball team (id: ??, ns: 0)), ('2009 Asian Youth Games', 2009 Asian Youth Games (id: ??, ns: 0)), ('2010 FIBA World Championship', 2010 FIBA World Championship (id: ??, ns: 0)), ('2010 Youth Olympics', 2010 Youth Olympics (id: ??, ns: 0)), ('2011 FIBA 3x3 Youth World Championships', 2011 FIBA 3x3 Youth World Championships (id: ??, ns: 0)), ('2012 FIBA 3x3 World Championships', 2012 FIBA 3x3 World Championships (id: ??, ns: 0)), ('2014 FIBA Basketball World Cup', 2014 FIBA Basketball World Cup (id: ??, ns: 0)))
Tautan ini tersebar di seluruh artikel, dan sekarang kami menginginkan tautan yang ada di bagian ringkasan artikel. Kita bisa melakukan ini dengan ekspresi reguler sederhana.
Membuat ekspresi reguler untuk mengekstrak tautan
Karena kita memiliki teks tautan dari setiap tautan dalam artikel, regex hanyalah gabungan dari semua tautan 'teks yang dipisahkan oleh pipa "atau" atau "operator". Satu-satunya hal lain yang perlu kita khawatirkan adalah mengurutkan tautan berdasarkan panjangnya. Berikut adalah contoh sederhana untuk menggambarkan hal ini. Misalkan kita ingin mengekstrak setiap kata “menang” atau “luar biasa” dari sebuah teks. Mari kita uji regexnya terlebih dahulu won|wonderful
:
import re text="I won the game at the wonderful tournament" re.findall('won|wonderful', text)
('won', 'won')
Apa yang baru saja terjadi?
Contoh pertama dari “Won,” yang merupakan kata kedua dalam kalimat, diekstraksi dengan benar, namun kata kedua tidak. Sebenarnya iya, tapi bukan itu yang kami inginkan. Karena kita menentukan “Menang” untuk pertama kalinya, mesin regex akan mulai mencari pola ini. Jika tidak menemukannya, ia mencari opsi lain. Dalam kasus kami, ditemukan contoh kedua “Won” tepat sebelum “Derful”. Setelah mesin regex mengekstrak "yang kedua", sekarang berada di "D" dan dari sana tidak ada kasus "menang" lainnya. Mari kita coba regex yang sama, namun tempatkan pola yang lebih panjang sebelum pola yang lebih pendek:
re.findall('wonderful|won', text)
('won', 'wonderful')
Sekarang berfungsi sebagaimana mestinya. Karena alasan ini, kami akan mengurutkan regex ekstraksi tautan berdasarkan panjangnya untuk menghindari situasi ini.
Hal lain yang ingin kami pastikan adalah kami ingin mengekstrak seluruh kata. Misalkan kita ingin mengekstrak pola “Istirahat”. Ketika mesin Regex menemukan kata “restoran” dalam teks yang disediakan, mesin tersebut mengekstraknya sebagai kecocokan yang sah dengan pola tersebut. Tapi kami tidak menginginkan itu. Kami hanya ingin “istirahat” sebagai kata yang lengkap. Untuk ini kita dapat menggunakan pola batas kata dalam ekspresi reguler \b
. Karena backslack di regex adalah karakter khusus, kita menghindarinya dengan menambahkan karakter lain. Regex kami akan terlihat seperti ini:
pattern_1\\b|\\bpattern_2\\b|\\bpattern_3
dan sebagainya.
Kode berikut membuat regex yang diinginkan menurut:
- Penggabungan semua teks jangkar tautan kami
- Urutkan berdasarkan panjangnya dalam urutan menurun (pola yang lebih panjang sebelum pola yang lebih pendek)
- Terhubung dengan peluit
|
serta kata kata karakter pembatas kata\\b
dari kedua sisi
page_basketball_linksregex = '\\b|\\b'.join(sorted(page_basketball.links.keys(), key=len, reverse=True)) page_basketball_linksregex(:400)
"List of U.S. high school basketball national player of the year awards\\b|\\bList of basketball players who have scored 100 points in a single game\\b|\\bYoung Men's Christian Association Building (Albany, New York)\\b|\\bCategory:Articles with dead external links from February 2021\\b|\\bCategory:Articles with disputed statements from January 2019\\b|\\bCategory:Articles with disputed statements from Janua"
Berikut adalah beberapa baris pertama dari teks ringkasan kami, dengan teks jangkar entitas yang disorot, sehingga Anda bisa mendapatkan gambaran tentang cara kerjanya:
Bola basket adalah olahraga tim di mana dua tim, paling sering masing-masing terdiri dari lima pemain, bersaing satu sama lain di lapangan persegi panjang, dengan tujuan utama menembakkan bola basket (kira-kira berdiameter 9,4 inci), melewati pemain bertahan (kira-kira 9,4 inci). inci) untuk menembak. Keranjang berdiameter 18 inci setinggi 10 kaki (3,048 m) hingga papan belakang di setiap ujung lapangan) dan mencegah tim lawan menembak melalui ring mereka sendiri.
Sebuah field goal bernilai dua poin kecuali di belakang garis tiga poin ketika bernilai tiga poin. Setelah pelanggaran, permainan dihentikan, dan pemain yang melakukan pelanggaran atau ditunjuk untuk melakukan pelanggaran teknis, diberikan satu, dua, atau tiga lemparan bebas. Tim dengan poin terbanyak di akhir pertandingan menang, tetapi jika pertandingan berakhir dengan skor imbang, akan dikenakan waktu permainan tambahan (perpanjangan waktu).
Pemain memajukan bola dengan mengopernya sambil berjalan atau berlari (menggiring bola) atau kepada rekan satu tim, yang keduanya memerlukan keterampilan yang cukup. Saat menyerang, pemain dapat menggunakan berbagai macam pukulan – layup, jump shot, atau dunk; Saat bertahan, mereka bisa mencuri bola dari penggiring bola, mencegat umpan atau memblok tembakan; Baik penyerangan maupun pertahanan dapat menghasilkan rebound, yaitu tembakan meleset yang memantul dari tepi atau papan belakang. Cedera adalah mengangkat atau menarik kaki pivot tanpa menggiring bola, membawanya, atau memegang bola dengan kedua tangan dan kemudian melanjutkan menggiring bola.
Lima pemain di masing-masing sisi terbagi dalam lima posisi bermain. Pemain tertinggi biasanya menjadi center, pemain tertinggi dan terkuat kedua adalah power forward, pemain yang sedikit lebih pendek namun lebih lincah adalah penyerang kecil, dan pemain terpendek atau pengendali bola terbaik adalah shooting guard dan point guard, yang Menerapkan rencana permainan pelatih dengan mengatur pelaksanaan permainan ofensif dan defensif (posisi pemain). Secara informal, pemain bisa bermain tiga lawan tiga, dua lawan dua, dan satu lawan satu.
Diciptakan pada tahun 1891 oleh instruktur kebugaran Kanada-Amerika James Naismith Di dalam Springfield,MassachusettsDi Amerika Serikat, bola basket telah menjadi salah satu olahraga terpopuler dan paling banyak ditonton di dunia. Itu Asosiasi Bola Basket Nasional (NBAmendengarkan)) adalah liga bola basket profesional utama di dunia dalam hal popularitas, gaji, bakat, dan tingkat kompetisi (yang menarik sebagian besar bakatnya dari bola basket perguruan tinggi AS). Di luar Amerika Utara, klub-klub top dari liga nasional lolos ke kejuaraan kontinental seperti Liga Euro dan itu Liga Champions Bola Basket Amerika. Itu Piala Dunia Bola Basket FIBA Dan turnamen bola basket putra Olimpiade adalah acara olahraga internasional utama yang menarik tim-tim nasional terkemuka dari seluruh dunia. Setiap benua menjadi tuan rumah kompetisi regional untuk tim nasional seperti keranjang Euro Dan Fiba Amerika.
Itu Piala Dunia Bola Basket Wanita FIBA Turnamen bola basket wanita Olimpiade menampilkan tim nasional terbaik dari kejuaraan kontinental. Liga utama Amerika Utara adalah wNBA (Kejuaraan Bola Basket Divisi I Wanita NCAA juga populer), sementara klub-klub terkuat Eropa ikut terlibat Liga Euro Wanita.
Kami sekarang ingin mendapatkan teks tautan yang cocok dengan ringkasan artikel kami dan memasukkannya ke dalam kamus sederhana. Kuncinya adalah teks jangkar yang cocok. Nilainya akan menjadi halaman permintaan Wikipedia (termasuk semua data yang relevan).
Saat mengatur nilainya, kami mengirimkan permintaan ke Wikipedia untuk mendapatkan data baru tentang halaman yang cocok. Hasil akhirnya adalah ini links_wikis
Kamus berisi informasi lengkap tentang setiap kecocokan yang diekstraksi. Kami terutama tertarik pada nama entitas dan URL sehingga kami dapat membuat bingkai data sederhana untuk menampilkan hasil akhir yang kami cari.
links_wikis = {} for match in re.finditer(page_basketball_linksregex, page_basketball.summary): links_wikis(match.group()) = wiki_wiki.page(match.group())
Susun fasilitas dan hubungannya (disarikan dari ringkasan Aritcle)
ent_link = pd.DataFrame({ 'entity': links_wikis.keys(), 'url': (link.fullurl for link in links_wikis.values())}) ent_link.style.set_caption('
Unit di bagian ringkasan /Basketball
Wiki
'))
Unit di bagian ringkasan /Basketball
Wiki
badan hukum | URL | |
0 | James Naismith | https://en.wikipedia.org/wiki/james_naismith |
1 | Springfield,Massachusetts | https://en.wikipedia.org/wiki/springfield,_massachusetts |
2 | Asosiasi Bola Basket Nasional | https://en.wikipedia.org/wiki/national_basketball_association |
3 | NBA | https://en.wikipedia.org/wiki/national_basketball_association |
4 | Liga Euro | https://en.wikipedia.org/wiki/euroleague |
5 | Liga Champions Bola Basket Amerika | https://en.wikipedia.org/wiki/Basketball_Champions_league_americas |
6 | Piala Dunia Bola Basket FIBA | https://en.wikipedia.org/wiki/fiba_basketball_world_cup |
7 | keranjang Euro | https://en.wikipedia.org/wiki/eurobasket |
8 | Fiba Amerika | https://en.wikipedia.org/wiki/fiba_americup |
9 | Piala Dunia Bola Basket Wanita FIBA | https://en.wikipedia.org/wiki/fiba_women%27S_BASKETBALL_WORLD_CUP |
10 | Wnba | https://en.wikipedia.org/wiki/women%27s_national_basketball_association |
11 | Kejuaraan Bola Basket Divisi I Wanita NCAA | https://en.wikipedia.org/wiki/ncaa_division_i_women%27S_Basketball_Tournament |
12 | Wanita Liga Euro | https://en.wikipedia.org/wiki/euroleague_women |
Mengingat halaman “Bola Basket”, kami memiliki bingkai data yang berisi entitas di bagian ringkasannya, bersama dengan setiap URL yang terkait dengan setiap entitas.
Langkah selanjutnya adalah memformat respon ini secara konsisten sehingga Chatgpt dapat mengetahui secara pasti bagaimana memformat respon tersebut untuk kita. Formatnya adalah sebagai berikut.
Format penyelesaian GPT dengan jelas dan konsisten
Entity_1: https://en.wikipedia.org/wiki/Entity_1 Entity_2: https://en.wikipedia.org/wiki/Entity_2 Entity_3: https://en.wikipedia.org/wiki/Entity_3 ...
completion = '@@'.join((': '.join(entity) for entity in ent_link.values)) print(*completion.split('@@'), sep='\n')
James Naismith: https://en.wikipedia.org/wiki/James_Naismith Springfield, Massachusetts: https://en.wikipedia.org/wiki/Springfield,_Massachusetts National Basketball Association: https://en.wikipedia.org/wiki/National_Basketball_Association NBA: https://en.wikipedia.org/wiki/National_Basketball_Association EuroLeague: https://en.wikipedia.org/wiki/EuroLeague Basketball Champions League Americas: https://en.wikipedia.org/wiki/Basketball_Champions_League_Americas FIBA Basketball World Cup: https://en.wikipedia.org/wiki/FIBA_Basketball_World_Cup EuroBasket: https://en.wikipedia.org/wiki/EuroBasket FIBA AmeriCup: https://en.wikipedia.org/wiki/FIBA_AmeriCup FIBA Women's Basketball World Cup: https://en.wikipedia.org/wiki/FIBA_Women%27s_Basketball_World_Cup WNBA: https://en.wikipedia.org/wiki/Women%27s_National_Basketball_Association NCAA Women's Division I Basketball Championship: https://en.wikipedia.org/wiki/NCAA_Division_I_women%27s_basketball_tournament EuroLeague Women: https://en.wikipedia.org/wiki/EuroLeague_Women
Kami sekarang ingin menempatkan pasangan prompt/penyelesaian dalam format JSON standar yang diperlukan ChatGPT, yaitu
{"prompt": "prompt text goes here", "completion": "completion text goes here"}
Gabungkan perintah dan penutupannya dalam format JSON yang disimpan dalam file JSONLINES (ini adalah “pelatihan” kami)
print(json.dumps({"prompt":page_basketball.summary,"completion":completion}))
{"prompt": "Basketball is a team sport in which two teams, most commonly of five players each, opposing one another on a rectangular court, compete with the primary objective of shooting a basketball (approximately 9.4 inches (24 cm) in diameter) through the defender's hoop (a basket 18 inches (46 cm) in diameter mounted 10 feet (3.048 m) high to a backboard at each end of the court), while preventing the opposing team from shooting through their own hoop. A field goal is worth two points, unless made from behind the three-point line, when it is worth three. After a foul, timed play stops and the player fouled or designated to shoot a technical foul is given one, two or three one-point free throws. The team with the most points at the end of the game wins, but if regulation play expires with the score tied, an additional period of play (overtime) is mandated.\nPlayers advance the ball by bouncing it while walking or running (dribbling) or by passing it to a teammate, both of which require considerable skill. On offense, players may use a variety of shots \u2013 the layup, the jump shot, or a dunk; on defense, they may steal the ball from a dribbler, intercept passes, or block shots; either offense or defense may collect a rebound, that is, a missed shot that bounces from rim or backboard. It is a violation to lift or drag one's pivot foot without dribbling the ball, to carry it, or to hold the ball with both hands then resume dribbling.\nThe five players on each side fall into five playing positions. The tallest player is usually the center, the second-tallest and strongest is the power forward, a slightly shorter but more agile player is the small forward, and the shortest players or the best ball handlers are the shooting guard and the point guard, who implements the coach's game plan by managing the execution of offensive and defensive plays (player positioning). Informally, players may play three-on-three, two-on-two, and one-on-one.\nInvented in 1891 by Canadian-American gym teacher James Naismith in Springfield, Massachusetts, in the United States, basketball has evolved to become one of the world's most popular and widely viewed sports. The National Basketball Association (NBA) is the most significant professional basketball league in the world in terms of popularity, salaries, talent, and level of competition (drawing most of its talent from U.S. college basketball). Outside North America, the top clubs from national leagues qualify to continental championships such as the EuroLeague and the Basketball Champions League Americas. The FIBA Basketball World Cup and Men's Olympic Basketball Tournament are the major international events of the sport and attract top national teams from around the world. Each continent hosts regional competitions for national teams, like EuroBasket and FIBA AmeriCup.\nThe FIBA Women's Basketball World Cup and Women's Olympic Basketball Tournament feature top national teams from continental championships. The main North American league is the WNBA (NCAA Women's Division I Basketball Championship is also popular), whereas the strongest European clubs participate in the EuroLeague Women.", "completion": "James Naismith: https://en.wikipedia.org/wiki/James_Naismith@@Springfield, Massachusetts: https://en.wikipedia.org/wiki/Springfield,_Massachusetts@@National Basketball Association: https://en.wikipedia.org/wiki/National_Basketball_Association@@NBA: https://en.wikipedia.org/wiki/National_Basketball_Association@@EuroLeague: https://en.wikipedia.org/wiki/EuroLeague@@Basketball Champions League Americas: https://en.wikipedia.org/wiki/Basketball_Champions_League_Americas@@FIBA Basketball World Cup: https://en.wikipedia.org/wiki/FIBA_Basketball_World_Cup@@EuroBasket: https://en.wikipedia.org/wiki/EuroBasket@@FIBA AmeriCup: https://en.wikipedia.org/wiki/FIBA_AmeriCup@@FIBA Women's Basketball World Cup: https://en.wikipedia.org/wiki/FIBA_Women%27s_Basketball_World_Cup@@WNBA: https://en.wikipedia.org/wiki/Women%27s_National_Basketball_Association@@NCAA Women's Division I Basketball Championship: https://en.wikipedia.org/wiki/NCAA_Division_I_women%27s_basketball_tournament@@EuroLeague Women: https://en.wikipedia.org/wiki/EuroLeague_Women"}
# for link, name in links_wikis.items(): # display_markdown(f'### {link}', raw=True) # display_markdown(name.summary, raw=True) # print()
Setelah kami melakukan ini untuk halaman Wikipedia, kami siap menggabungkan semua langkah ini ke dalam satu fungsi. Fungsi ini mengambil halaman Wikipedia sebagai masukan dan mengembalikan objek JSON seperti pada langkah terakhir.
Catatan penting tentang memformat perintah dan tanggapan: Harus ada indikasi yang jelas tentang di mana perintah berakhir dan di mana penyelesaian berakhir. Bisa apa saja, dan pola teks yang sangat tidak mungkin adalah pilihan yang baik, misalnya dua karakter newlin yang mengikuti serangkaian tanda dolar.
Buat fungsi yang menggunakan siput Wikipedia, mis. /Basketball
dan mengembalikan string JSON yang diinginkan
Ini menggabungkan semua langkah yang diambil sejauh ini. Dalam fungsinya, “Ner” adalah singkatan dari “pengenalan entitas bernama”.
prompt_end = '\n\n%%%%%\n' completion_end = '\n\n^^^^^\n' def wikipedia_ner(page): wikipage = wiki_wiki.page(page) page_links_regex = '\\b|\\b'.join(sorted(wikipage.links.keys(), key=len, reverse=True)) links_wikis = {} for match in re.finditer(page_links_regex, wikipage.summary): links_wikis(match.group()) = wiki_wiki.page(match.group()) ent_link = pd.DataFrame({ 'entity': links_wikis.keys(), 'url': (link.fullurl for link in links_wikis.values())}) completion = ' ' + '@@'.join((': '.join(entity) for entity in ent_link.values)) training_dict = { 'prompt': wikipage.summary + prompt_end, 'completion': completion + completion_end} return json.dumps(training_dict)
Uji lagi dengan /Basketball
Sekarang kita telah mengabstraksikan semua langkah ke dalam satu perintah, mari kita lihat cara kerjanya menggunakan halaman yang sama dengan tempat kita memulai.
basketball = wikipedia_ner('Basketball')
print(json.loads(basketball)('prompt'))
Basketball is a team sport in which two teams, most commonly of five players each, opposing one another on a rectangular court, compete with the primary objective of shooting a basketball (approximately 9.4 inches (24 cm) in diameter) through the defender's hoop (a basket 18 inches (46 cm) in diameter mounted 10 feet (3.048 m) high to a backboard at each end of the court), while preventing the opposing team from shooting through their own hoop. A field goal is worth two points, unless made from behind the three-point line, when it is worth three. After a foul, timed play stops and the player fouled or designated to shoot a technical foul is given one, two or three one-point free throws. The team with the most points at the end of the game wins, but if regulation play expires with the score tied, an additional period of play (overtime) is mandated. Players advance the ball by bouncing it while walking or running (dribbling) or by passing it to a teammate, both of which require considerable skill. On offense, players may use a variety of shots – the layup, the jump shot, or a dunk; on defense, they may steal the ball from a dribbler, intercept passes, or block shots; either offense or defense may collect a rebound, that is, a missed shot that bounces from rim or backboard. It is a violation to lift or drag one's pivot foot without dribbling the ball, to carry it, or to hold the ball with both hands then resume dribbling. The five players on each side fall into five playing positions. The tallest player is usually the center, the second-tallest and strongest is the power forward, a slightly shorter but more agile player is the small forward, and the shortest players or the best ball handlers are the shooting guard and the point guard, who implements the coach's game plan by managing the execution of offensive and defensive plays (player positioning). Informally, players may play three-on-three, two-on-two, and one-on-one. Invented in 1891 by Canadian-American gym teacher James Naismith in Springfield, Massachusetts, in the United States, basketball has evolved to become one of the world's most popular and widely viewed sports. The National Basketball Association (NBA) is the most significant professional basketball league in the world in terms of popularity, salaries, talent, and level of competition (drawing most of its talent from U.S. college basketball). Outside North America, the top clubs from national leagues qualify to continental championships such as the EuroLeague and the Basketball Champions League Americas. The FIBA Basketball World Cup and Men's Olympic Basketball Tournament are the major international events of the sport and attract top national teams from around the world. Each continent hosts regional competitions for national teams, like EuroBasket and FIBA AmeriCup. The FIBA Women's Basketball World Cup and Women's Olympic Basketball Tournament feature top national teams from continental championships. The main North American league is the WNBA (NCAA Women's Division I Basketball Championship is also popular), whereas the strongest European clubs participate in the EuroLeague Women. %%%%%
print(*json.loads(basketball)('completion').split('@@'), sep='\n')
James Naismith: https://en.wikipedia.org/wiki/James_Naismith Springfield, Massachusetts: https://en.wikipedia.org/wiki/Springfield,_Massachusetts National Basketball Association: https://en.wikipedia.org/wiki/National_Basketball_Association NBA: https://en.wikipedia.org/wiki/National_Basketball_Association EuroLeague: https://en.wikipedia.org/wiki/EuroLeague Basketball Champions League Americas: https://en.wikipedia.org/wiki/Basketball_Champions_League_Americas FIBA Basketball World Cup: https://en.wikipedia.org/wiki/FIBA_Basketball_World_Cup EuroBasket: https://en.wikipedia.org/wiki/EuroBasket FIBA AmeriCup: https://en.wikipedia.org/wiki/FIBA_AmeriCup FIBA Women's Basketball World Cup: https://en.wikipedia.org/wiki/FIBA_Women%27s_Basketball_World_Cup WNBA: https://en.wikipedia.org/wiki/Women%27s_National_Basketball_Association NCAA Women's Division I Basketball Championship: https://en.wikipedia.org/wiki/NCAA_Division_I_women%27s_basketball_tournament EuroLeague Women: https://en.wikipedia.org/wiki/EuroLeague_Women ^^^^^
Sekarang mari kita lakukan ini dalam skala besar.
Dapatkan ribuan URL/siput Wikipedia dari halaman populer, mengekstrak entitas dan tautan
Kami ingin menemukan daftar acak URL Wikipedia dan mendapatkan teks ringkasannya beserta entitas yang diekstraksi (dan URL-nya). Untuk melakukan ini kita akan menggunakan Periklanan, paket Python yang memiliki, antara lain, perayap SEO.
Kami lebih memilih untuk mendapatkan data untuk halaman Wikipedia yang populer. Alasannya adalah semakin banyak orang yang memiliki halaman yang lebih populer, semakin banyak orang yang bekerja untuk mengeditnya dan oleh karena itu kualitas unit yang diekstraksi akan lebih baik. Kode berikut dimulai dengan membuat daftar halaman Wikipedia yang paling banyak dilihat dan mengikuti link dari sana. Saya telah menyertakan komentar di setiap baris yang menjelaskan lebih banyak tentang fungsinya.
adv.crawl( url_list="https://en.wikipedia.org/wiki/Wikipedia:Top_25_Report", output_file="wiki_crawl.jl", # for each crawled page, should the crawler follow discovered links? # this is also known as "spider mode" as opposed to "list mode" where # only the given URLs are crawled follow_links=True, # out of the disovered links, which ones should the crawler follow? # follow links that match the following regex: include_url_regex='https://en.wikipedia.org/wiki/(A-Z).+', # same as the previous parameter, but for exclusion, this is to prevent # following fragments exclude_url_regex='#', # further customization of the crawling process custom_settings={ # stop crawling after a certain number of pages 'CLOSESPIDER_PAGECOUNT': 1500, # save the logs of the crawl process in this file (good for debugging) 'LOG_FILE': 'wiki_crawl.jl', # save the details of the current crawl job to a folder, so we can # pause/resume the crawl without having to re-crawl the same pages again 'JOBDIR': 'wikicrawl_job' })
Ikhtisar kumpulan data merayap:
wiki_crawl = pd.read_json('wiki_crawl.jl', lines=True) wiki_crawl.head(3)
URL | judul | Area pandang | rangkaian karakter | H1 | H2 | H3 | resmi | ALT_HREF | OG: Judul | … | JSONLD_1_AUTHOR.NAME | jsonld_1_publisher.@type | jsonld_1_publisher.nama | jsonld_1_publisher.logo.@type | jsonld_1_publisher.logo.url | resp_Headers_set kuki | Permintaan_HeaDers_Referer | H4 | IMG_USEMAP | H5 | |
0 | https://en.wikipedia.org/wiki/wikipedia:top_25_report | Wikipedia: 25 laporan teratas - Wikipedia | Lebar = 1000 | UTF-8 | Wikipedia: 25 laporan teratas | Artikel Wikipedia Paling Populer Minggu Ini (16-22 April 2023) (Sunting) | Pengecualian (sunting) | https://en.wikipedia.org/wiki/wikipedia:top_25_report | //en.m.wikipedia.org/wiki/wikipedia:top_25_report@/w/index.php?title=wikipedia:top_25_report&action=edit@@/w/index…. | Wikipedia: 25 laporan teratas - Wikipedia | … | Nan | Nan | Nan | Nan | Nan | Nan | Nan | Nan | Nan | Nan |
1 | https://en.wikipedia.org/wiki/chatgpt | Obrolan - Wikipedia | Lebar = 1000 | UTF-8 | Obrolangpt | Isi @@ Pelatihan @@ Fitur dan Keterbatasan @@ Layanan @@ penerimaan @@ Implikasi @@ Kepedulian Etis @@ Dampak Budaya @@ C… | Fitur @@ batasan @@ Layanan Dasar @@ Layanan Premium @@ Dukungan Pengembang Perangkat Lunak @@ Maret 2023 Pelanggaran Keamanan @@ Lainnya… | https://en.wikipedia.org/wiki/chatgpt | //en.m.wikipedia.org/wiki/chatgpt@@/w/index.php?title=special:Perubahan Terkini&feed=atom | Obrolan - Wikipedia | … | Kontributor proyek Wikimedia | organisasi | Yayasan Wikimedia, Inc. | Objek Gambar | https://www.wikimedia.org/static/images/wmf-hor-googpub.png | WMF-DP = 46F; Jalur =/; | https://en.wikipedia.org/wiki/wikipedia:top_25_report | Nan | Nan | Nan |
2 | https://en.wikipedia.org/wiki/wikipedia:Humor | Wikipedia: Humor - Wikipedia | Lebar = 1000 | UTF-8 | Wikipedia: Humor | Isi @@ Indikator kebutuhan humor (edit) @@ Mengapa humor yang bertanggung jawab itu penting (edit) @@ Humor dalam artikel (edit) @@ humor keluar… | Bagaimana humor dapat diterima (edit) | https://en.wikipedia.org/wiki/wikipedia:Humor | //en.m.wikipedia.org/wiki/wikipedia:humor@/w/index.php?title=wikipedia | Wikipedia: Humor - Wikipedia | … | Nan | Nan | Nan | Nan | Nan | Nan | https://en.wikipedia.org/wiki/wikipedia:top_25_report | Nan | Nan | Nan |
3 baris × 107 kolom
Ekstrak siput URL dari halaman perayapan.
wikipedia_slugs = wiki_crawl(~wiki_crawl('url').str.contains('(a-zA-Z):(a-zA-Z)'))('url').str.rsplit('/').str(-1).tolist() wikipedia_slugs(:30)
('ChatGPT', 'Mario', 'Netflix', 'GPT-3', 'Language_models', 'LLaMA', 'Meta_AI', 'Bard_(chatbot)', 'Ambedkar_Jayanti', 'The_Greatest_Indian', 'The_Matrix', 'Dalai_Lama', 'Academic_plagiarism', 'Hyderabad', 'B._R._Ambedkar', 'Bon_Jovi', 'Mahatma_Gandhi', 'Mario_Bros.', 'Satoru_Iwata', 'San_Diego_Comic-Con', 'A_Perfect_Crime_(TV_series)', 'If', 'V_Wars', 'When_They_See_Us', 'AJ_and_the_Queen', 'Unbelievable_(miniseries)', 'Trinkets_(TV_series)', 'Trailer_Park_Boys:_The_Animated_Series', 'Twelve_Forever', 'Turn_Up_Charlie')
Telusuri siput dan ekstrak entitas dan tautan
entity_responses = () errors = () for i, slug in enumerate(wikipedia_slugs): try: print(f'{i:>4}Getting: /{slug}', end='\r') wikipage = wikipedia_ner(slug) entity_responses.append(wikipage) except Exception as e: err = (slug, str(e)) errors.append(err) print('Error: ', err)
Buat file pelatihan
with open('training_data_wikipedia_ner.jsonl', 'w') as file: for resp in entity_responses: prompt = json.loads(resp)('prompt') completion = json.loads(resp)('completion') if prompt: print(json.dumps({'prompt': prompt, 'completion': completion}), file=file)
Dengan ini, model pelatihan kami sudah siap, serangkaian pasangan prompt/penyelesaian sederhana yang dapat diunggah dan digunakan dengan ChatGPT.
Anda dapat mengujinya dan melihat cara kerjanya di aplikasi ekstraksi entitas langsung ini.
(Tagstotranslate) CHATGPT (T) Data Terstruktur (T) Pengikisan web