Простая библиотека, которая позволяет вам ползать, очищать и дедуплизировать веб -страницы для создания огромных монолингвальных наборов данных. Используя эту библиотеку, вы сможете создавать наборы данных, больше, чем те, которые используются OpenAI для GPT-2.
Эта библиотека использует Python 3.
git clone https://github.com/chiphuyen/lazynlp.git
cd lazynlp
pip3 install -r requirements.txt
pip3 install .Если вы хотите удалить библиотеку, используйте:
pip3 uninstall lazynlp
Существует несколько основных свалков доступных URL -адресов, которые вы можете использовать.
Это ссылка на все представления о Reddit к месяцам. Вы можете скачать необработанный дамп и процесс, чтобы получить ссылки. Имейте в виду, что каждый из этих свалков огромный (100 МБ - 1 ГБ).
@jcpeterson достаточно любезен, чтобы предоставить список дедуплицированных ссылок, по крайней мере, 3 кармы, которые вы можете скачать здесь.
В период с 2015 по 2015 по 2018-10 годы составляют около 23 млн. URL, из которых около 40-60 % являются плохими URL (URL больше не существуют или не подходят для скребков). Это означает, что после того, как вы загрузили и очистили все хорошие URL -адреса из этого, у вас должно быть около 10 млн. Веб -страниц или 50 ГБ чистого текста.
Вы можете скачать список всех URL -адресов для нас, Gutenberg Books здесь. Есть 50 тыс. Книги, которые превращаются в около 14 ГБ чистого текста.
Вы также можете запустить lazynlp.get_us_gutenberg_links() , чтобы получить тот же список. Например, если вы хотите получить все URL -адреса Гутенберга и сохранить его в файле us_gutenberg.urls , запустите следующую команду. Это может занять полдня.
lazynlp.get_us_gutenberg_links('us_gutenberg.urls')
Вы можете скачать список всех URL -адресов в австралийские книги Гутенберга здесь. Есть 4K книги, которые превращаются в около 1 ГБ чистого текста.
Вы также можете запустить lazynlp.get_aus_gutenberg_links() , чтобы получить тот же список. Например, если вы хотите получить все URL -адреса Гутенберга и хранить его в файле aus_gutenberg.urls :
lazynlp.get_aus_gutenberg_links('aus_gutenberg.urls')
Вы можете скачать здесь свалки Википедии.
Вы не хотите скачать один и тот же URL несколько раз. Есть две функции, которые помогут вам дедуплизировать все URL:
lazynlp.dedup_lines(files, outfold)
Эта функция принимает список файлов (в каждом файле каждая строка представляет собой URL -адреса) и посвящает каждый файл по всем предыдущим файлам. Сохраните все дедуплицированные файлы в Outfold.
lazynlp.dedup_lines_from_new_file(original_files, new_file, outfile)
Эта функция позволяет вам дать новый файл против всех ранее дедуплицированных файлов (riginal_files)
Если вы хотите загрузить каждую веб -страницу отдельно, позвоните:
lazynlp.download_page(link, context=None, timeout=None)
Если вы хотите загрузить из файла, который содержит список URL -адресов, вызовите:
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.
"""
Если у вас много URL -адресов, вы можете разделить список на несколько файлов и вызвать эту функцию отдельно. Я смог запустить 40 сценариев параллельно. Думаю, я мог бы параллировать код. Я только что нашел это проще.
Вы можете избавиться от всех тегов HTML, декодировать UTF-8 в строку, транслировать иностранные символы, коллапс-пробел, заменить неприемные символы, HTML Unessape и т. Д. Используя методы, доступные в Lazynlp/Cleaner.py.
Вы также можете просто вызвать следующую функцию, чтобы выполнить большую часть обработки.
lazynlp.clean_page(page)
В этой библиотеке функция lazynlp.download_pages() выполняет как ползание, так и очистку, поэтому у вас есть веб -страницы, как это, например, это:
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.
Чтобы избежать переппредставленных произведений текстов, вы хотите включить только страницы, которые не совпадают с другими страницами.
Чтобы оценить количество перекрытия целевых файлов с определенными исходными файлами, используйте эту функцию:
lazynlp.estimate_overlap(source_files, target_files, gran='word', n=8, capacity=10000, error_rate=1e-5, header=0, interval=100000)
gran - это грануларный запас токенов: «char» или «слово».
n -n-грамм.
capacity и error_rate предназначены для используемого Bloomfilter.
header : Количество строк каждого файла для пропуска. Это потому, что в нашем формате первая строка - это URL
Чтобы оценить количество перекрытия целевого файла с помощью существующего Bloomfilter, используйте эту функцию:
lazynlp.estimate_overlap_bf(bf, target_file, gran='word', n=8, header=0)
Если предоставлен список файлов, например, очищенные веб -страницы, чтобы отфильтровать все файлы, которые содержат больше, чем threshold перекрытия с другими файлами, используйте эту функцию:
lazynlp.filter_files(files, threshold=0.5, gran='word', n=8, capacity=100000000, error_rate=1e-7, header=0, interval=1000000)
Имена всех файлов, которые считаются дублированными, хранятся в dupped_files.list
Имена всех файлов, используемых для набора данных, хранятся в clean_files.list
1 ГБ текста составляет около 1B символов. Английское слово имеет в среднем 4,5 символа, или 5,5, включая пробел. Итак, 1 ГБ текста составляет около 181 млн. Слова.
Когда я запустил 30 сценариев параллельно, потребовалось 3 часа, чтобы загрузить и очистить 1 ГБ чистого текста. Так что потребуется 5 дней, чтобы получить 50 ГБ чистого текста.
Набор данных OpenAI имеет 40 ГБ, что, по оценкам, содержит около 7-8 миллиардов слов. Если вы загружаете все веб -страницы из URL -адресов Good Reddit и Gutenberg, у вас должен быть набор данных, больше, чем WebText Openai.
Openai, в их газете для GPT-2, не включал в себя статьи в Википедии из-за страха перекрытия. Вы можете включить статьи в Википедии, которые имеют меньше, чем определенное количество перекрытия с существующим набором данных с использованием lazynlp.estimate_overlap_bf(bf, target_file, gran='word', n=8 .