Pada halaman ini
Penalaan halus LLM pada data khusus domain boleh meningkatkan prestasi tugasan sebanyak 20-40% berbanding gesaan sahaja, menurut penyelidikan daripada OpenAI. Tetapi halangannya jarang sekali model itu sendiri -- ia ialah mendapatkan data latihan berstruktur dan berkualiti tinggi secara berskala. Pengumpulan data manual adalah perlahan. Membeli set data adalah mahal dan selalunya basi. Web scraping mengisi jurang itu, tetapi hanya jika anda boleh mengekstrak kandungan yang bersih dan berstruktur tanpa menghabiskan lebih banyak masa pada kejuruteraan data berbanding latihan model.
CrawlForge menyediakan lapisan pengekstrakan untuk saluran paip data latihan AI: merangkak domain secara berskala, mengekstrak teks yang bersih, menganalisis kualiti kandungan, dan mengeluarkan set data berstruktur yang sedia untuk penalaan halus atau penjanaan benaman.
Isi Kandungan
- Mengapa Data Web untuk Latihan AI
- Gambaran Keseluruhan Seni Bina
- Langkah 1: Penemuan dan Perangkakan Sumber
- Langkah 2: Pengekstrakan dan Pembersihan Kandungan
- Langkah 3: Penapisan dan Analisis Kualiti
- Langkah 4: Menstrukturkan Data untuk Latihan
- Langkah 5: Membina Saluran Paip
- Analisis Kos Credit
- Hasil dan Manfaat
- Soalan Lazim
Mengapa Data Web untuk Latihan AI
Web ialah repositori data teks khusus domain terbesar di planet ini. Untuk aplikasi AI khusus -- analisis undang-undang, penyelidikan perubatan, pemodelan kewangan, dokumentasi teknikal -- web scraping selalunya satu-satunya cara praktikal untuk membina set data latihan dengan kedalaman dan kebaharuan yang mencukupi.
| Sumber Data | Kos | Kebaharuan | Liputan Domain | Volum |
|---|---|---|---|---|
| Set data komersial | $$$$ | Berbulan lamanya | Terhad | Tetap |
| Dokumen dalaman | Free | Semasa | Sempit | Kecil |
| Web scraping | $ | Masa nyata | Luas | Tanpa had |
| Penjanaan sintetik | $$ | Tidak berkenaan | Boleh dikonfigurasi | Sederhana |
Web scraping menghasilkan nisbah kos kepada liputan yang terbaik, tetapi HTML mentah bukanlah data latihan. Anda memerlukan saluran paip yang mengekstrak teks yang bersih, menapis untuk kualiti, dan mengeluarkan rekod berstruktur.
Gambaran Keseluruhan Seni Bina
Saluran paip data latihan menggunakan lima alat CrawlForge:
| Peringkat | Alat | Credits | Tujuan |
|---|---|---|---|
| Penemuan | crawl_deep | 5 | Merangkak domain sumber untuk halaman kandungan |
| Pengekstrakan | extract_content | 2 | Menarik teks yang bersih dan boleh dibaca daripada halaman |
| Pemprosesan kelompok | batch_scrape | 5 | Memproses ribuan URL dengan cekap |
| Analisis kualiti | analyze_content | 3 | Menjaringkan kualiti kandungan dan menapis hingar |
| Pengendalian dokumen | process_document | 3 | Menghuraikan PDF dan dokumen |
Langkah 1: Penemuan dan Perangkakan Sumber
Mulakan dengan mengenal pasti dan merangkak sumber berautoriti dalam domain sasaran anda.
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
const client = new Client({
name: 'training-data-pipeline',
version: '1.0.0',
});
interface CrawlSource {
domain: string;
category: string;
maxPages: number;
includePatterns: string[];
excludePatterns: string[];
}
async function crawlSource(source: CrawlSource) {
const result = await client.callTool({
name: 'crawl_deep',
arguments: {
url: `https://${source.domain}`,
max_pages: source.maxPages,
max_depth: 3,
extract_content: false, // Just discover URLs first
respect_robots: true,
include_patterns: source.includePatterns,
exclude_patterns: source.excludePatterns,
},
});
const crawled = JSON.parse(result.content[0].text);
return {
domain: source.domain,
category: source.category,
urls: crawled.pages.map((p: { url: string }) => p.url),
totalDiscovered: crawled.totalPages,
};
}
// Example: Crawl technical documentation sites
const sources: CrawlSource[] = [
{
domain: 'docs.python.org',
category: 'programming',
maxPages: 500,
includePatterns: ['/3/library/', '/3/tutorial/'],
excludePatterns: ['/2.7/', '/genindex'],
},
{
domain: 'developer.mozilla.org',
category: 'web-development',
maxPages: 500,
includePatterns: ['/en-US/docs/Web/'],
excludePatterns: ['/Users/', '/search'],
},
];Langkah 2: Pengekstrakan dan Pembersihan Kandungan
Ekstrak secara berkelompok teks yang bersih daripada URL yang ditemui, menanggalkan navigasi, iklan, dan pelat dandang.
interface ExtractedContent {
url: string;
title: string;
content: string;
wordCount: number;
category: string;
}
async function extractBatch(
urls: string[],
category: string
): Promise<ExtractedContent[]> {
const results: ExtractedContent[] = [];
// Process in batches of 25 for efficiency
const batchSize = 25;
for (let i = 0; i < urls.length; i += batchSize) {
const batch = urls.slice(i, i + batchSize);
const batchResult = await client.callTool({
name: 'batch_scrape',
arguments: {
urls: batch.map(url => ({ url })),
formats: ['text'],
includeMetadata: true,
maxConcurrency: 10,
},
});
const parsed = JSON.parse(batchResult.content[0].text);
for (const page of parsed.results) {
if (page.status === 'success' && page.content) {
const wordCount = page.content.split(/\s+/).length;
// Skip pages with too little content
if (wordCount < 200) continue;
results.push({
url: page.url,
title: page.metadata?.title || '',
content: page.content,
wordCount,
category,
});
}
}
}
return results;
}Langkah 3: Penapisan dan Analisis Kualiti
Bukan semua kandungan web sesuai untuk latihan. Gunakan analyze_content untuk menjaringkan kualiti dan menapis hingar.
interface QualityScore {
url: string;
readability: number;
topicRelevance: number;
contentDepth: number;
overallScore: number;
passesFilter: boolean;
}
async function scoreContentQuality(
item: ExtractedContent,
targetTopics: string[]
): Promise<QualityScore> {
const analysis = await client.callTool({
name: 'analyze_content',
arguments: {
text: item.content,
},
});
const result = JSON.parse(analysis.content[0].text);
// Calculate topic relevance based on overlap
const detectedTopics = (result.topics || []).map(
(t: string) => t.toLowerCase()
);
const topicOverlap = targetTopics.filter(t =>
detectedTopics.some((dt: string) => dt.includes(t.toLowerCase()))
).length;
const topicRelevance = topicOverlap / targetTopics.length;
// Content depth: word count normalized (800+ words = 1.0)
const contentDepth = Math.min(item.wordCount / 800, 1.0);
// Readability: normalize to 0-1 scale
const readability = (result.readabilityScore || 50) / 100;
// Weighted overall score
const overallScore =
topicRelevance * 0.4 + contentDepth * 0.3 + readability * 0.3;
return {
url: item.url,
readability,
topicRelevance,
contentDepth,
overallScore,
passesFilter: overallScore >= 0.5, // Minimum quality threshold
};
}Penapisan kualiti biasanya membuang 30-50% kandungan yang dirangkak, tetapi data yang tinggal melatih model dengan jauh lebih baik. Data berkualiti rendah memperkenalkan hingar yang merosotkan prestasi model.
Langkah 4: Menstrukturkan Data untuk Latihan
Ubah kandungan yang ditapis kepada format yang dijangkakan oleh saluran paip latihan anda.
// JSONL format for fine-tuning (OpenAI compatible)
interface TrainingRecord {
messages: Array<{
role: 'system' | 'user' | 'assistant';
content: string;
}>;
metadata: {
source: string;
category: string;
quality_score: number;
};
}
function structureForFineTuning(
items: ExtractedContent[],
scores: QualityScore[]
): TrainingRecord[] {
return items
.filter((_, i) => scores[i].passesFilter)
.map((item, i) => ({
messages: [
{
role: 'system' as const,
content: `You are a knowledgeable assistant specializing in ${item.category}.`,
},
{
role: 'user' as const,
content: `Explain the following topic in detail: ${item.title}`,
},
{
role: 'assistant' as const,
content: item.content,
},
],
metadata: {
source: item.url,
category: item.category,
quality_score: scores[i].overallScore,
},
}));
}
// For embedding generation (simpler format)
interface EmbeddingRecord {
text: string;
metadata: {
source: string;
title: string;
chunk_index: number;
};
}
function structureForEmbeddings(
items: ExtractedContent[],
chunkSize: number = 512
): EmbeddingRecord[] {
const records: EmbeddingRecord[] = [];
for (const item of items) {
// Split into chunks for embedding models
const words = item.content.split(/\s+/);
const chunks = [];
for (let i = 0; i < words.length; i += chunkSize) {
chunks.push(words.slice(i, i + chunkSize).join(' '));
}
chunks.forEach((chunk, index) => {
records.push({
text: chunk,
metadata: {
source: item.url,
title: item.title,
chunk_index: index,
},
});
});
}
return records;
}Langkah 5: Membina Saluran Paip
Gabungkan semua peringkat menjadi saluran paip yang lengkap dan boleh diguna semula.
async function buildTrainingDataset(
sources: CrawlSource[],
targetTopics: string[],
outputFormat: 'fine-tuning' | 'embeddings'
) {
console.log(`Starting pipeline for ${sources.length} sources...`);
let allContent: ExtractedContent[] = [];
// Stage 1: Crawl all sources
for (const source of sources) {
console.log(`Crawling ${source.domain}...`);
const crawled = await crawlSource(source);
console.log(` Found ${crawled.urls.length} pages`);
// Stage 2: Extract content
const extracted = await extractBatch(crawled.urls, crawled.category);
console.log(` Extracted ${extracted.length} quality pages`);
allContent = allContent.concat(extracted);
}
// Stage 3: Quality scoring
console.log(`\nScoring ${allContent.length} pages for quality...`);
const scores: QualityScore[] = [];
for (const item of allContent) {
scores.push(await scoreContentQuality(item, targetTopics));
}
const passing = scores.filter(s => s.passesFilter).length;
console.log(` ${passing}/${allContent.length} passed quality filter`);
// Stage 4: Structure output
if (outputFormat === 'fine-tuning') {
const records = structureForFineTuning(allContent, scores);
console.log(`\nGenerated ${records.length} training records`);
return records;
} else {
const filtered = allContent.filter((_, i) => scores[i].passesFilter);
const records = structureForEmbeddings(filtered);
console.log(`\nGenerated ${records.length} embedding chunks`);
return records;
}
}Analisis Kos Credit
Untuk set data 1,000 halaman daripada 5 domain sumber:
| Peringkat | Alat | Credits | Kuantiti | Subjumlah |
|---|---|---|---|---|
| Perangkakan | crawl_deep | 5 | 5 domain | 25 |
| Pengekstrakan | batch_scrape | 5 | 40 kelompok | 200 |
| Penjaringan kualiti | analyze_content | 3 | 1,000 halaman | 3,000 |
| Penghuraian dokumen | process_document | 3 | 50 PDF | 150 |
| Jumlah | 3,375 credits |
Peringkat penjaringan kualiti mendominasi kos. Untuk mengurangkannya, tapis terlebih dahulu mengikut bilangan perkataan dan corak URL sebelum menjalankan analyze_content -- ini boleh mengurangkan kos sebanyak 40-60%.
Pelan Professional ($99/bulan, 50,000 credits) menyokong pembinaan set data besar setiap bulan. Untuk penciptaan set data sekali sahaja, pelan Hobby pada $19/bulan (5,000 credits) merangkumi set data permulaan yang kukuh.
Hasil dan Manfaat
Saluran paip data latihan yang dibina dengan baik menyampaikan:
- Skala: Ekstrak 1,000+ halaman setiap domain dalam masa berjam, bukan berminggu
- Kualiti: Penapisan automatik membuang 30-50% hingar sebelum ia sampai ke model anda
- Kebolehulangan: Saluran paip yang sama, output yang sama -- tiada perbezaan antara penganalisis
- Kebaharuan: Jalankan semula setiap bulan untuk memastikan data latihan kekal semasa
Pasukan yang menggunakan CrawlForge untuk pengekstrakan data latihan melaporkan pengurangan masa penyediaan data sebanyak 70-80% berbanding pengumpulan manual, dengan kualiti data yang setanding atau lebih baik kerana penapisan yang konsisten.
Soalan Lazim
Adakah web scraping untuk latihan AI sah di sisi undang-undang?
Web scraping data awam secara amnya sah di AS di bawah keputusan hiQ Labs lawan LinkedIn. Walau bagaimanapun, anda harus menghormati robots.txt, terma perkhidmatan, dan hak cipta. CrawlForge menghormati robots.txt secara lalai. Untuk set data latihan komersial, rujuk penasihat undang-undang tentang penggunaan saksama dalam bidang kuasa anda.
Berapa banyak data yang saya perlukan untuk penalaan halus?
OpenAI mengesyorkan minimum 50 contoh untuk penalaan halus, dengan penambahbaikan yang bermakna bermula sekitar 500-1,000 contoh berkualiti tinggi. Untuk tugasan khusus domain, 2,000-5,000 contoh biasanya menghasilkan keputusan yang cemerlang.
Bolehkah CrawlForge mengendalikan PDF dan format dokumen lain?
Ya. process_document (3 credits) menghuraikan PDF, DOCX, dan format lain. Gabungkannya dengan crawl_deep untuk menemui pautan dokumen, kemudian proses secara berkelompok untuk saluran paip latihan anda.
Bina set data latihan anda hari ini. Mula percuma dengan 1,000 credits -- cukup untuk mengekstrak dan menganalisis 200+ halaman untuk set data pertama anda. Tiada kad kredit diperlukan.
Sumber berkaitan:
Cuba sendiri — tiada pendaftaran diperlukan
Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.
1,000 credits percuma • Isi semula setiap bulan • Tiada kad kredit diperlukan
Tag
Tentang Penulis
Kekal dikemas kini dengan pandangan terkini
Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.
Tiada spam. Berhenti melanggan bila-bila masa.