Perpustakaan langsung yang memungkinkan Anda merangkak, membersihkan, dan mendeduplikasi halaman web untuk membuat set data monolingual yang besar. Menggunakan pustaka ini, Anda harus dapat membuat dataset lebih besar dari yang digunakan oleh OpenAi untuk GPT-2.
Perpustakaan ini menggunakan Python 3.
git clone https://github.com/chiphuyen/lazynlp.git
cd lazynlp
pip3 install -r requirements.txt
pip3 install .Jika Anda ingin menghapus instalasi perpustakaan, gunakan:
pip3 uninstall lazynlp
Ada beberapa dump utama URL yang tersedia yang dapat Anda gunakan.
Ini adalah tautan ke semua pengiriman ke reddit dalam beberapa bulan. Anda dapat mengunduh dump mentah dan memproses untuk mendapatkan tautan. Perlu diingat bahwa masing -masing dump ini sangat besar (100MB - 1GB).
@jcpeterson cukup baik untuk memberikan daftar tautan yang dideduplikasi dengan setidaknya 3 karma yang dapat Anda unduh di sini.
Ada sekitar 23 juta URL dari antara 2015-06 hingga 2018-10, di mana sekitar 40-60 % adalah URL yang buruk (URL tidak ada lagi atau tidak ramah scraper). Ini berarti bahwa setelah Anda mengunduh dan membersihkan semua URL yang baik dari ini, Anda harus memiliki sekitar 10 juta halaman web atau 50GB teks murni.
Anda dapat mengunduh daftar semua URL kepada kami buku Gutenberg di sini. Ada 50 ribu buku, yang dikonversi menjadi sekitar 14GB teks murni.
Anda juga dapat menjalankan lazynlp.get_us_gutenberg_links() untuk mendapatkan daftar yang sama. Misalnya, jika Anda ingin mendapatkan semua URL Gutenberg dan menyimpannya di file us_gutenberg.urls , jalankan perintah berikut. Ini mungkin memakan waktu setengah hari.
lazynlp.get_us_gutenberg_links('us_gutenberg.urls')
Anda dapat mengunduh daftar semua URL ke buku Gutenberg Australia di sini. Ada buku 4K, yang dikonversi menjadi sekitar 1GB teks murni.
Anda juga dapat menjalankan lazynlp.get_aus_gutenberg_links() untuk mendapatkan daftar yang sama. Misalnya, jika Anda ingin mendapatkan semua URL Gutenberg dan menyimpannya di file aus_gutenberg.urls :
lazynlp.get_aus_gutenberg_links('aus_gutenberg.urls')
Anda dapat mengunduh Dumps Wikipedia di sini.
Anda tidak ingin mengunduh URL yang sama beberapa kali. Ada dua fungsi yang membantu Anda mendeduplikasi semua URL:
lazynlp.dedup_lines(files, outfold)
Fungsi ini mengambil daftar file (di setiap file, setiap baris adalah URL) dan mendeduplikasi setiap file terhadap semua file sebelumnya. Simpan semua file yang diuplikasi di luar.
lazynlp.dedup_lines_from_new_file(original_files, new_file, outfile)
Fungsi ini memungkinkan Anda untuk mendeduplikasi file baru terhadap semua file yang sebelumnya dideduplikasi (asli_files)
Jika Anda ingin mengunduh setiap halaman web secara terpisah, hubungi:
lazynlp.download_page(link, context=None, timeout=None)
Jika Anda ingin mengunduh dari file yang berisi daftar URL, hubungi:
lazynlp.download_pages(link_file, folder, timeout=30, default_skip=True, extensions=[], domains=[])
"""
link_file:
file contains links to webpages to crawl. Each line contains one URL.
folder:
folder that you want to contain your downloaded pages.
timeout:
seconds to wait for a page to respond before abandoning it.
default_skip:
set to True if you want to automatically skip all URLs that contain domains and extensions that are known to be scraper-unfriendly or NSFW.
You can see the list of excluded domains at lazynlp/exclude_domains.txt.
You can see the list of excluded extensions at lazynlp/exclude_extensions.txt
You can also add your own domains and extensions to skip with domains and extensions and arguments.
In the folder:
Each URL is downloaded into a file, indexed by the order in which it is downloaded. The first line of each file is the URL. The rest is the textual content of the page.
index.urls contains all the URLs that have been successfully downloaded.
bad.urls contains the URLs that are bad.
connection.urls contains the URLs that haven't been downloaded because of connection issues.
non_ascii.urls contains the URLs that haven't been downloaded because of bad encoding issues.
empty.urls contains the URLs that have empty textual content.
"""
Jika Anda memiliki banyak URL, Anda dapat membagi daftar menjadi beberapa file dan memanggil fungsi ini secara terpisah. Saya bisa menjalankan 40 skrip secara paralel. Saya kira saya bisa menyejajarkan kode. Saya baru saja menemukan ini lebih mudah.
Anda dapat menyingkirkan semua tag HTML, mendekode UTF-8 menjadi string, menerjemahkan karakter asing, runtuh ruang putih, ganti karakter yang tidak dapat dicetak, unescape html, dll. Menggunakan metode yang tersedia dalam lazynlp/cleaner.py.
Anda juga dapat memanggil fungsi berikut untuk melakukan sebagian besar pemrosesan.
lazynlp.clean_page(page)
Di pustaka ini, fungsi lazynlp.download_pages() melakukan bagian merangkak dan pembersihan, jadi halaman web yang Anda miliki adalah teks murni, seperti ini:
http://www.thecannabist.co/2017/03/02/jeff-sessions-russia-resign-democrats/74687/
Attorney general nominee Sen. Jeff Sessions, R-Ala., testifies on Capitol Hill in Washington on Jan. 10, 2017, in the first day of his confirmation hearing before the Senate Judiciary Committee. Top Democrats now say that because he misled the committee about his visits to Russia, he should resign. (Andrew Harnik, The Associated Press)
House Oversight and Government Reform Committee Chairman Jason Chaffetz, R-Utah, tweeted early Thursday that "AG Sessions should clarify his testimony and recuse himself."
Later, Sen. Rob Portman, R-Ohio, said in a statement, "Jeff Sessions is a former colleague and a friend, but I think it would be best for him and for the country to recuse himself from the DOJ Russia probe."
House Majority Leader Kevin McCarthy, R-Calif., also initially said during an appearance on MSNBC's "Morning Joe" that Sessions should bow out.
Asked whether Sessions should recuse himself in this situation, McCarthy replied "I think the trust of the American people -- you recuse yourself in these situations, yes."
McCarthy was pressed a second time about whether he was calling for Sessions to recuse himself and he confirmed that he believed the situation required a recusal.
"I think it would be easier from that standpoint, yes," McCarthy said.
But McCarthy later said his comment had been misinterpreted, telling Fox News' "Fox and Friends," "I'm not calling on him to recuse himself. I was asked on 'Morning Joe,' if he needs to recuse himself as going forward. As you just heard, Attorney General Sessions said he would recuse himself going forward -- appropriate, and that's all my answer was."
The comments from prominent Republicans follow revelations that Sessions met with the Russian ambassador during election season. Under oath in front of the Senate Judiciary Committee for his confirmation hearing in January, Sessions had said that he had not met with any Russian officials.
Senate Minority Leader Charles Schumer, D-N.Y., joined growing Democratic calls for Sessions to either resign or at least recuse himself from any investigations into Russia's meddling in U.S. elections.
"Attorney General Sessions cannot possibly lead an investigation into Russian interference in our elections or come anywhere near it. With these revelations, he may indeed become the subject of it," Schumer told reporters. "Better for the country if he resigns, but let's get an investigation going."
Because the Department of Justice should be above reproach, for the good of the country, the Attorney General should resign.
Untuk menghindari teks yang terlalu terwakili, Anda hanya ingin memasukkan halaman yang tidak tumpang tindih secara signifikan dengan halaman lain.
Untuk memperkirakan jumlah tumpang tindih file target dengan file sumber tertentu, gunakan fungsi ini:
lazynlp.estimate_overlap(source_files, target_files, gran='word', n=8, capacity=10000, error_rate=1e-5, header=0, interval=100000)
gran adalah granulary dari token: 'char' atau 'word' level.
n adalah n-gram.
capacity dan error_rate adalah untuk Bloomfilter yang digunakan.
header : Jumlah baris dari setiap file untuk dilewati. Itu karena dalam format kami, baris pertama adalah URL
Untuk memperkirakan jumlah tumpang tindih file target dengan Bloomfilter yang ada, gunakan fungsi ini:
lazynlp.estimate_overlap_bf(bf, target_file, gran='word', n=8, header=0)
Jika diberi daftar file, misalnya halaman web yang dibersihkan, untuk memfilter semua file yang berisi lebih dari threshold tumpang tindih dengan file lain, gunakan fungsi ini:
lazynlp.filter_files(files, threshold=0.5, gran='word', n=8, capacity=100000000, error_rate=1e-7, header=0, interval=1000000)
Nama semua file yang dianggap duplikasi disimpan di dupped_files.list
Nama semua file yang digunakan untuk dataset disimpan di clean_files.list
Teks 1GB adalah sekitar 1B karakter. Kata bahasa Inggris memiliki rata -rata 4,5 karakter, atau 5,5 termasuk whitespace. Jadi 1GB teks adalah sekitar 181 juta kata.
Ketika saya menjalankan 30 skrip secara paralel, butuh 3 jam untuk mengunduh dan membersihkan 1GB teks murni. Jadi butuh 5 hari untuk mendapatkan 50GB teks murni.
Dataset Openai memiliki 40GB, yang saya perkirakan mengandung sekitar 7-8 miliar kata. Jika Anda mengunduh semua halaman web dari buku URL Reddit yang bagus dan buku Gutenberg, Anda harus memiliki dataset lebih besar dari webtext Openai.
Openai, dalam makalah mereka untuk GPT-2, tidak termasuk artikel Wikipedia karena takut tumpang tindih. Anda dapat memilih untuk memasukkan artikel Wikipedia yang memiliki kurang dari sejumlah tumpang tindih dengan dataset yang ada menggunakan lazynlp.estimate_overlap_bf(bf, target_file, gran='word', n=8 .