我抓取了194万张Airbnb照片,寻找鸦片馆、宠物客串和凌乱的厨房。
I scraped 1.94M Airbnb photos for opium dens, pet cameos, and messy kitchens

原始链接: https://burla-cloud.github.io/examples/airbnb-burla-demo/

该流程概述了一个用于评估和嵌入数据的三阶段流程,可能与在线列表相关。 **阶段 1 (s02b):** 下载照片网址,然后使用 CLIP(一个图像-文本模型)根据预定义的提示对每张图像进行评分。结果保存为 Parquet 分片到共享目录(“./shared”),跨 6,000 个批次,利用并行处理。 **阶段 2 (s04):** 使用 SBERT(一个句子嵌入模型)嵌入前 200K 条文本评论。每个工作进程处理数据的一个切片,并将嵌入写入共享目录中的单独 Parquet 分片,再次使用并行处理(最大 200 个并发工作进程)。 **阶段 3 (s05c):** 使用 Anthropic 的 Claude Haiku 模型验证精选图像。对于每个图像网址,模型确定列表是否有效,并将结果(包括判决)保存为 Parquet 分片。此阶段限制为 64 个并发工作进程。 `burla` 库促进了远程并行映射操作以实现高效处理,并且缓存用于 CLIP 和 SBERT 权重/模型。

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 我抓取了194万张Airbnb照片,寻找鸦片窝、宠物客串和凌乱的厨房 (burla-cloud.github.io) 20点 由 jmp1062 3小时前 | 隐藏 | 过去 | 收藏 | 3评论 帮助 wheelerwj 11分钟前 | 下一个 [–] 这件事很容易引发诉讼,而且我认为方法论很糟糕。回复 gavmor 19分钟前 | 上一个 | 下一个 [–] 这些太棒了!有些可能具有冒犯性,因为我看到一个舒适但俗气的英国小窝被标记为“有人刚离开过”的感觉,这…不公平。回复 guywithahat 6分钟前 | 上一个 | 下一个 [–] 这很棒,底部的评论是最好的部分。我很佩服他们能够抓取这么多数据。回复 考虑申请YC 2026年夏季项目!申请截止至5月4日。 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请YC | 联系方式 搜索:
相关文章

原文
# s02b: download every photo URL, score with CLIP,
# write parquet shards to ./shared. 6K batches.
from burla import remote_parallel_map
import open_clip

def score_batch(args):
    model, _, prep = open_clip.create_model_and_transforms(
        "ViT-B-32", pretrained="laion2b_s34b_b79k",
        cache_dir="./shared/clip_weights",
    )
    # download -> encode -> cosine vs PROMPTS -> parquet
    return {"shard": shard, "n_ok": n_ok}

remote_parallel_map(
    score_batch, batch_args,
    func_cpu=2, func_ram=8,
    max_parallelism=1000,   # 1k concurrent at peak
    grow=True,
)
# s04 tier 2: embed top 200K reviews with SBERT,
# one parquet shard per worker on ./shared.
from burla import remote_parallel_map
from sentence_transformers import SentenceTransformer

def embed_batch(args):
    model = SentenceTransformer(
        "all-MiniLM-L6-v2",
        cache_folder="./shared/sbert",
    )
    rows = read_slice(
        args.input_path, args.row_start, args.row_end,
    )
    vecs = model.encode(
        rows["comments"].tolist(), batch_size=128,
    )
    write_shard(args.output_root, rows, vecs)
    return {"n_ok": len(rows)}

remote_parallel_map(
    embed_batch, embed_args,
    func_cpu=2, func_ram=8, max_parallelism=200,
    grow=True,
)
# s05c: Haiku Vision double-checks the CLIP
# shortlists. Rate-limited at 64 workers.
from burla import remote_parallel_map
import anthropic, json

def validate_pet(args):
    client = anthropic.Anthropic()
    rows = []
    for url, listing_id in args.batch:
        msg = client.messages.create(
            model="claude-haiku-4-5", max_tokens=200,
            messages=pet_prompt(fetch(url)),
        )
        verdict = json.loads(msg.content[0].text)
        rows.append({"listing_id": listing_id, **verdict})
    write_shard(args.output_path, rows)
    return {"n_ok": len(rows)}

remote_parallel_map(
    validate_pet, pet_batches,
    func_cpu=2, func_ram=8, max_parallelism=64,
    grow=True,
)
联系我们 contact @ memedata.com