Eine unkomplizierte Bibliothek, mit der Sie Webseiten kriechen, aufräumen und dedupliziert werden können, um massive einsprachige Datensätze zu erstellen. Mit dieser Bibliothek sollten Sie in der Lage sein, Datensätze zu erstellen, die größer als die von OpenAI für GPT-2 verwendet werden.
Diese Bibliothek verwendet Python 3.
git clone https://github.com/chiphuyen/lazynlp.git
cd lazynlp
pip3 install -r requirements.txt
pip3 install .Wenn Sie die Bibliothek deinstallieren möchten, verwenden Sie:
pip3 uninstall lazynlp
Es gibt mehrere wichtige Müllkopien von URLs, die Sie verwenden können.
Dies ist der Link zu allen Einsendungen zu Reddit nach Monaten. Sie können den RAW -Dump und den Prozess herunterladen, um die Links zu erhalten. Denken Sie daran, dass jede dieser Müllkippe riesig ist (100 MB - 1 GB).
@jcpeterson ist so freundlich, eine Liste deduplizierter Links mit mindestens 3 Karma bereitzustellen, die Sie hier herunterladen können.
Es gibt etwa 23 Millionen URLs von 2015-06 bis 2018-10, von denen rund 40 bis 60 % schlechte URLs sind (URLs existieren nicht mehr oder sind nicht mehr als Schacherfreundlichkeit). Dies bedeutet, dass Sie, nachdem Sie alle guten URLs von diesem heruntergeladen und gereinigt haben, ca. 10m Webseiten oder 50 GB reinen Text haben sollten.
Sie können die Liste aller URLs hier an uns Gutenberg -Bücher herunterladen. Es gibt 50.000 Bücher, die auf etwa 14 GB reinen Text konvertieren.
Sie können auch lazynlp.get_us_gutenberg_links() ausführen, um dieselbe Liste zu erhalten. Wenn Sie beispielsweise alle Gutenberg -URLs erhalten und in der Datei us_gutenberg.urls speichern möchten, führen Sie den folgenden Befehl aus. Dies könnte einen halben Tag dauern.
lazynlp.get_us_gutenberg_links('us_gutenberg.urls')
Hier können Sie die Liste aller URLs in Australian Gutenberg -Bücher herunterladen. Es gibt 4K -Bücher, die auf etwa 1 GB reinen Text umwandeln.
Sie können auch lazynlp.get_aus_gutenberg_links() ausführen, um dieselbe Liste zu erhalten. Wenn Sie beispielsweise alle Gutenberg -URLs erhalten und in der Datei aus_gutenberg.urls möchten.
lazynlp.get_aus_gutenberg_links('aus_gutenberg.urls')
Sie können die Wikipedia -Dumps hier herunterladen.
Sie möchten die gleiche URL nicht mehrmals herunterladen. Es gibt zwei Funktionen, die Ihnen helfen, alle URLs zu deduplizieren:
lazynlp.dedup_lines(files, outfold)
Diese Funktion nimmt eine Liste von Dateien auf (in jeder Datei ist jede Zeile eine URLs) und deduplizieren jede Datei gegen alle vorherigen Dateien. Speichern Sie alle deduplizierten Dateien in Outfold.
lazynlp.dedup_lines_from_new_file(original_files, new_file, outfile)
Mit dieser Funktion können Sie eine neue Datei gegen alle zuvor deduplizierten Dateien (original_files) deduplizieren.
Wenn Sie jede Webseite separat herunterladen möchten, rufen Sie an:
lazynlp.download_page(link, context=None, timeout=None)
Wenn Sie aus einer Datei herunterladen möchten, die eine Liste von URLs enthält, rufen Sie an:
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.
"""
Wenn Sie viele URLs haben, können Sie die Liste in mehrere Dateien teilen und diese Funktion separat aufrufen. Ich konnte 40 Skripte parallel ausführen. Ich glaube, ich hätte den Code parallisieren können. Ich fand es einfach einfacher.
Sie können alle HTML-Tags loswerden, UTF-8 in Zeichenfolge dekodieren, fremde Zeichen transformieren, den weißen Raum zusammenbrechen, unausdruckliche Zeichen ersetzen, html unkapitativ sind usw. unter Verwendung von Methoden, die in Lazynlp/Cleaner.py verfügbar sind.
Sie können auch die folgende Funktion aufrufen, um den größten Teil der Verarbeitung auszuführen.
lazynlp.clean_page(page)
In dieser Bibliothek führt die Funktion lazynlp.download_pages() sowohl den Krabbeln als auch den Reinigungsteil aus, sodass die Webseiten, die Sie haben, reine Text wie folgt sind:
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.
Um zu vermeiden, dass alle Texte überrepräsentiert werden, möchten Sie nur Seiten einbeziehen, die sich nicht signifikant mit anderen Seiten überschneiden.
Verwenden Sie diese Funktion, um die Menge der Überlappung von Zieldateien mit bestimmten Quelldateien zu schätzen:
lazynlp.estimate_overlap(source_files, target_files, gran='word', n=8, capacity=10000, error_rate=1e-5, header=0, interval=100000)
gran ist der Granulier von Tokens: 'Char' oder 'Wort' Level.
n ist das n-Gramm.
capacity und error_rate sind für den verwendeten Bloomfilter.
header : Anzahl der Zeilen jeder Datei zu überspringen. Das liegt daran, dass in unserem Format die erste Zeile die URL ist
Verwenden Sie diese Funktion, um die Menge der Überlappung einer Zieldatei mit einem vorhandenen BloomFilter zu schätzen:
lazynlp.estimate_overlap_bf(bf, target_file, gran='word', n=8, header=0)
Wenn eine Liste von Dateien angegeben ist, haben Sie z. B. Webseiten gereinigt, um alle Dateien herauszufiltern, die mehr als threshold mit anderen Dateien enthalten, verwenden Sie diese Funktion:
lazynlp.filter_files(files, threshold=0.5, gran='word', n=8, capacity=100000000, error_rate=1e-7, header=0, interval=1000000)
Namen aller Dateien, die als dupliziert eingestuft werden, werden in dupped_files.list gespeichert
Die Namen aller für den Datensatz verwendeten Dateien werden in clean_files.list gespeichert .List
1 GB Text sind ungefähr 1B -Zeichen. Ein englisches Wort hat durchschnittlich 4,5 Zeichen oder 5,5 einschließlich Whitespace. 1 GB Text sind also ungefähr 181 m Wörter.
Als ich 30 Skripte parallel lief, dauerte es 3 Stunden, um 1 GB reinen Text herunterzuladen und zu reinigen. Es würde also 5 Tage dauern, bis 50 GB reinen Text erhalten.
Der OpenAI-Datensatz verfügt über 40 GB, die ich schätze, um etwa 7-8 Milliarden Wörter zu enthalten. Wenn Sie alle Webseiten von den Good Reddit -URLs und Gutenberg -Büchern herunterladen, sollten Sie einen Datensatz haben, der größer ist als das WebText von OpenAI.
Openai, in ihrem Artikel für GPT-2, enthielt keine Wikipedia-Artikel aus Angst vor Überlappungen. Sie können wählen, ob Sie Wikipedia -Artikel einfügen können, die weniger als eine bestimmte Menge an Überlappung mit dem vorhandenen Datensatz mit lazynlp.estimate_overlap_bf(bf, target_file, gran='word', n=8 haben.