我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。
整理目前手上有的素材:
原始資料中包含了一些不需要的雜訊,有鑑於此,需要展開資料清洗,以下先來看看資料格式:
!mkdir -p /content/model/dataset/
!mkdir -p /content/model/model/
!mkdir -p /content/model/logs/
import pandas as pd
df = pd.read_csv('/content/twcs/twcs.csv')
print(df.head())
結果如下:
接著展開資料清洗並存檔:
tweets = df['text'].dropna().tolist()
df_tweets = pd.DataFrame(tweets, columns=['text'])
df_tweets.to_csv('tweets.csv', index = False, encoding = 'utf-8')
formatted_length = "{:,}".format(len(df_tweets))
print(formatted_length)
import re
def filter_tweet(tweet):
return re.sub(r'[^a-z\s\']', '', tweet.lower())
filtered_tweets = [filter_tweet(tweet) for tweet in tweets]
f = 30
filtered_tweets = [tweet for tweet in filtered_tweets if len(tweet.split()) > f]
formatted_length = "{:,}".format(len(filtered_tweets))
print(formatted_length)
import csv
with open('/content/model/dataset/processed_tweets.csv', 'w', newline = '') as file:
writer = csv.writer(file)
for tweet in filtered_tweets:
writer.writerow([tweet])
程式說明如下:
re.sub
是 re
模組中的一個函數,用於替換字符串中的匹配部分pattern
:要匹配的正則表達式模式repl
:替換匹配部分的字符串string
:要處理的字符串^
:在字符類(character class)中,表示取反,即匹配不在方括號內的字符a-z
:表示所有小寫字母\s
:表示任何空白字符(空格、製表符、換行符等)\'
:表示單引號字符[^a-z\s\']
表示匹配所有不是小寫字母、空白字符或單引號的字符repl
,表示用於替換的字符串。這裡是一個空字符串,表示將匹配到的字符替換為空,即刪除匹配到的字符tweet
中的文本轉換為小寫,並刪除所有不是小寫字母、空白字符或單引號的字符如果想要看一下目前整理好的資料,可以使用以下程式:
from itertools import islice
with open('/content/model/dataset/processed_tweets.csv', 'r') as file:
reader = csv.reader(file)
# Use islice from itertools to only get the first 5 lines
for row in islice(reader, 5):
print(row[0])